#include "stdio.h"
#include "malloc.h"
typedef int ElemType;
typedef struct node{
ElemType data;
struct node *next;
}LinkStack;
LinkStack * InitStack(){
LinkStack *s;
s=(LinkStack *)malloc(sizeof(LinkStack));
if(s!=NULL){
s->next = NULL;
return s;
}else{
printf("分配内存失败!");
return NULL;
}
}
void ClearStack(LinkStack *s){
LinkStack *p=s->next;
while(p!=NULL){
free(s);
s=p;
p=p->next;
}
free(s);
}
int StackLength(LinkStack *s){
int i=0;
LinkStack *p;
p=s->next;
while(p!=NULL){
i++;
p=p->next;
}
return i;
}
int IsEmpty(LinkStack *s){
return s->next==NULL;
}
void Push(LinkStack *s,ElemType e){
LinkStack *p;
p=(LinkStack *)malloc(sizeof(LinkStack));
p->data=e;
p->next=s->next;//向下牵手
s->next=p;//向上牵手
}
//出栈
ElemType Pop(LinkStack *s){
ElemType e;
LinkStack *p;
if(IsEmpty(s)){//空的
return 0;
}
p=s->next;//寄存头后的节点位置
e=p->data;//取走数据
s->next = p->next;//牵下一个下一个
free(p);//释放掉p
return e;
}
ElemType GetTop(LinkStack *s){
ElemType e;
if(IsEmpty(s)){
return 0;
}
e=s->next->data;//直接取值
return e;
}
void DispStack(LinkStack *s){
LinkStack *p=s->next;//第一次指向栈顶
while(p!=NULL){//不等于0就输出
printf("%d\t",p->data);
p=p->next;
}
printf("\n");
}
main(){
int i;
LinkStack *s;
s=InitStack();
for(i=0;i<10;i++){
Push(s,i+1);
}
//ClearStack(s);
printf("栈的长度为:%d\n",StackLength(s));
/*
for(i=0;i<10;i++){
printf("%d\t",Pop(s));
}
*/
DispStack(s);
printf("\n");
printf("栈的长度为:%d\n",StackLength(s));
}
链栈(头插法)
最新推荐文章于 2022-07-14 16:35:11 发布