赞
踩
三段代码分别是栈的顺序存储,带头结点的链式存储,不带头结点的链式存储。
都包括着初始化、判空、进栈、建立栈表、出栈,读取栈顶元素、遍历操作,方便大家调试。
- #include<stdio.h>
- #include<stdlib.h>
- #define MaxSize 50
- typedef struct{ //栈的顺序存储类型
- int data[MaxSize]; //存放栈中元素
- int top; //栈顶指针
- }SqStack;
-
- void InitStack(SqStack &S)
- {
- S.top = -1; //初始化栈顶指针
- }
-
- bool StackEmpty(SqStack S) //判空操作
- {
- if(S.top == -1)
- return true;
- else
- return false;
- }
-
- bool Push(SqStack &S,int x) //进栈
- {
- if(S.top == MaxSize-1) //栈满报错
- return false;
- S.data[++S.top] = x; //注意入栈是指针先加一,再入栈
- return true;
- }
-
- SqStack CreateStack(SqStack &S)
- {
- int x = 0;
- scanf("%d",&x);
- while(x!=9999)
- {
- Push(S,x); //调用进栈函数
- scanf("%d",&x);
- }
- return S;
- }
-
- bool Pop(SqStack &S,int &x) //出栈
- {
- if(S.top == -1) //栈空报错
- return false;
- x=S.data[S.top--];
- printf("出栈元素为:%d\n",x);
- return true;
- }
-
- bool GetTop(SqStack S,int &x) //读取栈顶元素
- {
- if(S.top == -1)
- return false;
- x=S.data[S.top];
- return true;
- }
-
- void Print(SqStack S) //遍历
- {
- while(S.top != -1)
- {
- printf("%d ",S.data[S.top--]);
- }
- }
-
- int main()
- {
- int x = 0;
- SqStack S;
- InitStack(S);
- CreateStack(S); //创建栈
- Push(S,666); //再进一个元素
- Pop(S,x); //出栈,并用x返回栈顶元素
- Print(S);
- return 0;
- }
- #include<stdio.h>
- #include<stdlib.h>
- typedef struct StackNode{
- int data;
- struct StackNode *next;
- }StackNode,*LiStack;
-
- void InitStack(LiStack &S) //带头结点的链栈初始化
- {
- S=(StackNode *)malloc(sizeof(StackNode));
- S->next=NULL;
- }
-
- bool StackEmpty(LiStack S) //判空
- {
- if(S->next==NULL)
- return true;
- else
- return false;
- }
-
- bool Push(LiStack &S,int x) //进栈
- {
- StackNode *p=S;
- StackNode *o;
- o=(StackNode *)malloc(sizeof(StackNode));
- o->data = x;
- o->next = p->next ;
- p->next = o;
- return true;
- }
-
- LiStack CreateStack(LiStack &S) //调用Push函数建立链栈
- {
- int x = 0;
- scanf("%d",&x);
- while(x!=9999)
- {
- Push(S,x);
- scanf("%d",&x);
- }
- return S;
- }
-
- bool Pop(LiStack &S,int &x) //出栈 ,用x返回出栈的值
- {
- StackNode *p = S;
- if(p->next ==NULL)
- return false;
- StackNode *D = p->next ;
- x = D->data ;
- p->next =D->next ;
- free(D);
- return true;
- }
-
- bool GetTop(LiStack S,int &x) //读取栈顶元素,并用x返回其值
- {
- StackNode *p=S;
- if(p->next == NULL)
- return false;
- x=p->next->data ;
- printf("栈顶元素X=%d\n",x);
- return true;
- }
-
- void Print(LiStack S) //遍历
- {
- StackNode *p = S->next;
- while(p!=NULL)
- {
- printf("%d ",p->data);
- p=p->next ;
- }
- }
-
-
- int main()
- {
-
- int x = 0;
- LiStack S; //声明
- InitStack(S); //初始化
- CreateStack(S); //创建
- // Push(S,666); //进栈
- // Pop(S,x); //出栈
- GetTop(S,x); //读取栈顶元素
- Print(S);
-
- return 0;
- }
- #include<stdio.h>
- #include<stdlib.h>
- typedef struct StackNode{
- int data;
- struct StackNode *next;
- }StackNode,*LiStack;
-
- void InitStack(LiStack &S) //初始化不带头结点的链栈
- {
- S=NULL;
- }
-
- bool StackEmpty(LiStack S) //判空
- {
- if(S==NULL)
- return true;
- else
- return false;
- }
-
- bool Push(LiStack &S,int x) //进栈
- {
- StackNode *N;
- N=(StackNode *)malloc(sizeof(StackNode));
- N->data = x;
- N->next = S; //注意这里头插法方式的不同之处
- S = N;
- return true;
- }
-
- LiStack CreateStack(LiStack &S) //创建栈
- {
- int x = 0;
- printf("请输入入栈函数:");
- scanf("%d",&x);
- while(x!=9999)
- {
- Push(S,x);
- scanf("%d",&x);
- }
- return S;
- }
-
- bool Pop(LiStack &S,int &x) //出栈
- {
- if(S==NULL)
- return false;
- StackNode *p=S;
- x=p->data ;
- S=p->next ;
- free(p);
- return true;
- }
-
- bool GetTop(LiStack S,int &x) //读取栈顶元素
- {
- if(S==NULL)
- return false;
- x=S->data ;
- printf("栈顶元素为:%d \n",x);
- return true;
- }
-
- void Print(LiStack S) //遍历
- {
- while(S!=NULL)
- {
- printf("%d ",S->data);
- S=S->next ;
- }
- }
-
- int main()
- {
- int x = 0;
- LiStack S;
- InitStack(S);
- CreateStack(S);
- // Push(S,666);
- //Pop(S,x);
- GetTop(S,x);
- Print(S);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。