链式栈的基本操作(原创)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//链式栈的基本操作:初始化,入栈,出栈,取栈顶元素,判断栈空,栈满,获取栈顶元素,//显示栈
//经整理和测试无任何问题,欢迎大家学习!
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10
typedef struct linknode
{
int data;
struct linknode *next;
}LiStack;
int StackFull(LiStack *s);
LiStack *InitStack(void)//初始化栈
{
LiStack *s;
s=(LiStack*)malloc(sizeof(LiStack));
s->next=NULL;
return s;
if(i==1)
{
printf("请输入一个元素:");
scanf("%d",&elem);
Push(p,elem);
}
else if(i==2)Pop(p);
else if(i==3)GetTop(p);
else if(i==4)DispStack(p);
else if(i==5)printf("长度为:%d\n",StackLength(p));
}
int Push(LiStack *s,int e)//入栈头结点不放数据
{
LiStack *p1,*q;
if(StackFull(s)==1){printf("栈满!\n");return 0;}
printf("入栈成功!\n");
p1=(LiStack*)malloc(sizeof(LiStack));
if(i==MAXSIZE)return 1;
else return 0;
}
void DispStack(LiStack *s)//显示栈元素
{
LiBiblioteka Baidutack *p4;
p4=s->next;
if(s->next==NULL)printf("栈为空!\n");
while(p4!=NULL)
{printf("%d ",p4->data);p4=p4->next;}
p1->data=e;
p1->next=NULL;
if(s->next==NULL)s->next=p1;
else
{
for(q=s->next;q->next!=NULL;q=q->next);
q->next=p1;
}
return 1;
}
int StackLength(LiStack *s)//栈长度
printf("\n");
}
int Pop(LiStack *s)//出栈
{
LiStack *p5,*q;
if(s->next==NULL){printf("栈为空!\n");return 0;}
printf("出栈成功!\n");
for(p5=s;p5->next!=NULL;q=p5,p5=p5->next);
printf("栈顶元素为:%d\n",p6->data);
}
void main()
{
int i,elem;
LiStack *p;
p=InitStack();//初始化
while(1)
{
printf("[1]入栈[2]出栈[3]取栈顶元素[4]显示[5]求长度[6]退出:");
scanf("%d",&i);
{
int i=0;
LiStack *p2;
p2=s->next;
while(p2!=NULL){i++;p2=p2->next;}
return i;
}
int StackFull(LiStack *s)//判断栈满
{
LiStack *p3;
int i=0;
for(p3=s;p3->next!=NULL;p3=p3->next,i++);
else if(i==6)break;
else printf("请重新输入!\n");
}
}
q->next=NULL;
free(p5);
return 1;
}
void GetTop(LiStack *s)//获取栈顶元素
{
LiStack *p6;
if(s->next==NULL){printf("栈为空!\n");return;}
for(p6=s;p6->next!=NULL;p6=p6->next);
相关文档
最新文档