概述
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 50
typedef struct
{
int *data;
int pop;
}Sqstack;
void Init(Sqstack *S)
//初始化栈
{
S->pop=-1;
printf("-------初始化成功");
}
int StackEmpty(Sqstack S) //判空
{
if(S.pop==-1)
return 1;
return -1;
}
int Length(Sqstack S)
//求栈长
{
return S.pop+1;
}
int Push(Sqstack *S,int d)
//压栈
{
if(S->pop>=MAXSIZE-1)
//判断栈满
return -1;
S->data[++S->pop]=d;
return 1;
}
int Pop(Sqstack *S)
//出栈
{
if(S->pop==-1)
return -1;
return S->data[S->pop--];
}
int GetTop(Sqstack S)
//读取第一个数据
{
if(S.pop==-1)
return -1;
return S.data[S.pop];
}
//-------------------------------------------以下为共享栈
typedef struct
{
int *data;
int front,rear; //定义两个游标,分别指向栈顶前一个和栈底后一个位置
}ShareStack;
void Init_S(ShareStack *S)
//初始化共享栈,其实就是把一个顺序栈分为分别以顶和底为栈底的两个站
{
S->front=-1;
S->rear=MAXSIZE;
printf("n--------共享栈初始化成功");
}
int Full_S(ShareStack S)
//判满
{
if(S.front+1==S.rear)
return 1;
return -1;
}
int Empty_S(ShareStack S)
//判空
{
if(S.front==-1&&S.rear==MAXSIZE)
//全空
return -1;
if(S.front==-1&&S.rear!=MAXSIZE)
//1号空
return -2;
if(S.front!=-1&&S.rear==MAXSIZE)
//2号空
return -3;
}
int Length_S(ShareStack S)
//求长
{
return S.front+1+MAXSIZE-S.rear;
}
int Push_S(ShareStack *S,int d,int SN)
//压栈
{
if(Empty_S(*S)==1) //若栈满
return -1;
if(SN!=1&&SN!=2)
//栈号判误
return -3;
if(SN==1)
S->data[++S->front]=d;
else
S->data[--S->rear]=d;
}
int Pop_S(ShareStack *S,int SN)
//出栈
{
if(SN!=1&&SN!=2)
//栈号判误
return -3;
if(SN==1)
{
if(Empty_S(*S)==-2) //若1号空
return -1;
return S->data[S->front--];
}
if(Empty_S(*S)==-3) //若2号空
return -2;
return S->data[S->rear++];
}
int Get_S(ShareStack *S,int SN) //读栈顶元素,与出栈区别为游标是否移动
{
if(SN!=1&&SN!=2)
//栈号判误
return -3;
if(SN==1)
{
if(Empty_S(*S)==-2) //若1号空
return -1;
return S->data[S->front];
}
if(Empty_S(*S)==-3) //若2号空
return -2;
return S->data[S->rear];
}
int main()
{
//----------------------以下为顺序栈
Sqstack S1;
S1.data=(int *)malloc(sizeof(int)*MAXSIZE);
Init(&S1);
printf("n是否为空:%d",StackEmpty(S1));
Push(&S1,2);
printf("n栈长:%d",Length(S1));
printf("n读取元素:%d",GetTop(S1));
printf("n弹出数据:%d",Pop(&S1));
printf("n栈长:%d",Length(S1));
free(S1.data);
//----------------------以下为共享栈
ShareStack S2;
S2.data=(int *)malloc(sizeof(int)*MAXSIZE);
Init_S(&S2);
printf("n共享栈长:%d",Length_S(S2));
Push_S(&S2,1,1);
Push_S(&S2,1,2);
printf("n共享栈长:%d",Length_S(S2));
Pop_S(&S2,1);
printf("n共享栈长:%d",Length_S(S2));
printf("n获取元素:%d",Get_S(&S2,2));
printf("n共享栈判空:%d",Empty_S(S2));
//----------------------以下为单链栈说明
/*单链栈操作逻辑与顺序栈一致,即压栈以头插法完成
(实际认为栈顶节点为头结点,即栈顶为头结点,所有操作都在表头进行)
出栈读出表头节点即头结点后继节点后将其删除,其他操作逻辑类比顺序栈*/
return 0;
}
最后
以上就是风中纸鹤为你收集整理的栈基本操作(顺序栈、共享栈、单链栈说明)C语言版的全部内容,希望文章能够帮你解决栈基本操作(顺序栈、共享栈、单链栈说明)C语言版所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复