栈--链式存储
代码内容来自《大话数据结构》
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int SElemType;
struct StackNode{
SElemType data;
struct StackNode * next;
};
typedef struct StackNode * LinkStackPtr;
struct LinkStack{
LinkStackPtr top;
int count;
};
Status visit(SElemType c){
printf("%d ",c);
return OK;
}
Status InitStack(LinkStack *S){
S->top = (LinkStackPtr)malloc(sizeof(struct StackNode));
if( ! S->top ){
return ERROR;
}
S->top = NULL;
S->count = 0;
return OK;
}
Status ClearStack(LinkStack *S){
LinkStackPtr p,q;
p = S->top;
while(p){
q = p;
p = p->next;
free(q);
}
S->count = 0;
return OK;
}
Status StackEmpty(LinkStack S){
if(S.count){
return FALSE;
}
return TRUE;
}
int StackLength(LinkStack S){
return S.count;
}
Status GetTop(LinkStack S,SElemType *e){
if(S.top){
*e = (S.top)->data;
return OK;
}
return ERROR;
}
Status Push(LinkStack *S,SElemType e){
LinkStackPtr p = (LinkStackPtr)malloc(sizeof(struct StackNode));
p->data = e;
p->next = S->top;
S->top = p;
S->count ++;
return OK;
}
Status Pop(LinkStack *S,SElemType *e){
if( ! S->top){
return ERROR;
}
*e = S->top->data;
LinkStackPtr p = S->top;
S->top = S->top->next;
S->count--;
free(p);
return OK;
}
Status StackTraverse(LinkStack S){
LinkStackPtr p = S.top;
while(p){
visit(p->data);
p = p->next;
}
printf("\n");
return OK;
}
int main(){
int j;
Status i;
SElemType e;
LinkStack S;
i = InitStack(&S);
if( i){
printf("初始化成功\n");
} else {
printf("初始化失败\n");
}
printf("栈是否为空 %d\n",StackEmpty(S));
for(j=1;j<=10;j++){
Push(&S,j*2);
}
StackTraverse(S);
Pop(&S,&e);
printf("弹出的元素为%d\n",e);
StackTraverse(S);
i = GetTop(S,&e);
printf("此时的栈顶元素是%d \n",e);
printf("栈长度为%d\n",StackLength(S));
printf("栈是否为空 %d\n",StackEmpty(S));
ClearStack(&S);
printf("栈是否为空 %d\n",StackEmpty(S));
}
如需转载,请注明文章出处,谢谢!!!
浙公网安备 33010602011771号