栈的顺序存储结构及其基本运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//author:zhoucanji
//栈的顺序存储结构及其基本运算
//C语言版
#include
#include
#define MAXSIZE 10
typedef int ElemType;
typedef struct{
ElemType data[MAXSIZE];
int top;
}SqStack;
//初始化栈
void InitStack(SqStack **s)
{
(*s)=(SqStack *)malloc(sizeof(SqStack));
(*s)->top=-1;
}
//求栈的长度
int StackLength(SqStack *s)
{
return (s->top+1);
}
//判断栈是否为空
int EmptyStack(SqStack *s)
{
return (s->top!=-1);
}
//进栈
int Push(SqStack *s,ElemType e)
{
if(s->top>MAXSIZE-1)
return 0;
s->top++;
s->data[s->top]=e;
return 1;
}
//出栈
int Pop(SqStack *s,ElemType *e)
{
if(s->top==-1)
return 0;
s->top--;
*e=s->data[s->top];
return 1;
}
//取栈顶元素
int GetTop(SqStack *s,ElemType *e)
{
if(s->top==-1)
return 0;
*e=s->data[s->top];
return 1;
}
//遍历栈中元素
void DispStack(SqStack *s)
{
printf("遍历栈中元素:\n");
int i;
for(i=s->top;i>-1;i--){
printf("%d\t",s->data[i]);
}
printf("\n");
}
void InitArray(int *a,int n)
{
int i;
for(i=0;i
}
}
void DispalyArray(int *a,int n)
{
int i;
for(i=0;i
}
printf("\n以上是数组a[MAX]的遍历\n");
}
//创建栈
void CreateStack(SqStack *s,int *a)
{
int i=0;
for(i=0;i
s->top++;
}
}
int main()
{
int number;
int length;
int element;
int result;
int empty;
int a[MAXSIZE-5];
SqStack *s;
InitArray(a,MAXSIZE-5);
DispalyArray(a,MAXSIZE-5);
InitStack(&s);
CreateStack(s,a);
DispStack(s);
while(1){
printf("\n");
printf("请输入对应的数字,选择相应的功能!\n");
printf("按其它键,退出程序!\n");
printf("输入1,遍历栈中元素\n");
printf("输入2,求线性表的长度\n");
printf("输入3,判断栈是否为空\n");
printf("输入4,进栈\n");
printf("输入5,出栈\n");
printf("输入6,取栈顶元素\n");
printf("----------------------------------------------------------\n");
scanf("%d",&number);
switch(number){
case 1://遍历栈中元素
DispStack(s);
break;
case 2://求线性表的长度
length=StackLength(s);
printf("线性表的长度为: %d \n",length);
break;
case 3://判断栈是否为空
empty=EmptyStack(s);
if(empty==0)
printf("线性表为空\n");
else
printf("线性表不为空\n");
break;
case 4://进栈
printf("进栈的值?\n");
scanf("%d",&element);
result=Push(s,element)
;
if(result)
printf("进栈成功,元素%d!\n",element);
else
printf("进栈失败.");
break;
case 5://出栈
result=Pop(s,&element);
if(result)
printf("出栈成功,元素的值为%d!\n",element);
else
printf("出栈失败.");
break;
case 6://取栈顶元素
result=GetTop(s,&element);
if(result)
printf("取栈顶元素成功,元素的值为%d!\n",element);
else
printf("取栈顶元素失败.");
break;
default://退出程序
exit(1);
}
}
return 0;
}