C 언어 체인 스 택 실현
2405 단어 데이터 구조 와 알고리즘 학습 노트
#include
#include
#include
//
//
typedef struct Lnode{
int data;//
struct Lnode *next;//
}Lnode, *pLnode;
//
typedef struct Lstack{
pLnode base;//
pLnode top;//
}Lstack;
/**
*/
//
bool initStack(Lstack &S){
S.base = (pLnode)malloc(sizeof(Lnode));
if(S.base == NULL){exit(-1);}// ,
S.base->next = NULL;
S.top = S.base;
return true;
}
//
bool push(Lstack &S, int e){
if(S.base == NULL){exit(-1);}//
S.top->data = e;
pLnode pnew = (pLnode)malloc(sizeof(Lnode));
if(pnew == NULL){exit(-1);}
pnew->next = NULL;
S.top->next = pnew;
S.top = pnew;
return true;
}
// e
bool getTop(Lstack &S,int &e){
if(S.top == S.base){return false;}//
pLnode p = S.base;
while(p->next != S.top){
p = p->next;
}
e = p->data;
return true;
}
// e
bool pop(Lstack &S,int &e){
if(S.top == S.base){return false;}//
pLnode p = S.base;
while(p->next != S.top){
p = p->next;
}
e = p->data;
pLnode q = p->next;
p->next = NULL;
S.top = p;
free(q);
q = NULL;
return true;
}
// , true, false
bool isEmptyStack(Lstack &S){
if(S.base == NULL){exit(-1);} // ,
return S.top == S.base ? true : false;
}
//
bool resetStack(Lstack &S){
if(S.base == NULL){exit(-1);}
S.top = S.base;
pLnode p = S.base->next;
S.base->next = NULL;
while(p != NULL){
pLnode q = p->next;
free(p);
p = q;
}
return true;
}
//
int getStackLen(Lstack &S){
if(S.base == NULL){exit(-1);}
pLnode p = S.base;
int length = 0;
while(p != S.top){
length += 1;
p = p->next;
}
return length;
}
//
bool destroyStack(Lstack &S){
if(S.base == NULL){exit(-1);}
pLnode p, q;
p = S.base;
while(p != NULL){
q = p->next;
free(p);
p = q;
}
S.base = NULL;
return true;
}