顺序栈
顺序栈和顺序表基本相同,所以就当复习了
#include<stdio.h>
#include<stdlib.h>
#define maxsize 30
int i;
typedef int datatype;
typedef struct{
datatype *data;
int top;
}SeqStack;
int Initial(SeqStack *S){
S->data = (datatype*)malloc(maxsize*sizeof(datatype));
if(!S->data){
printf("内存分配失败");
exit(1);
}
int x;
printf("请输入元素");
scanf("%d",&x);
while(x!=0){
S->data[++S->top] = x;
scanf("%d",&x);
if(S->top>maxsize){
return 0;
}
}
return 1;
}
datatype Gettop(SeqStack *S){
if(S->top==-1)
return 0;
return S->data[S->top];
}
int length(SeqStack *S){
return S->top+1;
}
void show(SeqStack *S){
int i;
for(i = 0;i<=S->top;i++){
printf("栈中第%d个元素为:\n",i+1);
printf("%d\n",S->data[i]);
}
}
int Isfull(SeqStack *S){
return S->top==maxsize-1;
}
int Isempty(SeqStack *S){
return S->top==-1;
}
int Push(SeqStack *S,datatype x){
if(S->top == maxsize-1)
return 0;
S->data[++S->top] = x;
return 1;
}
int Pop(SeqStack *S){
if(S->top==-1)
return 0;
S->top--;
return 1;
}
int DestroyStack(SeqStack *S){
S->top = -1;
return 1;
}
void menu(SeqStack *S)
{
system("cls");
printf("\n\n\n\n");
printf("\t\t|---------------顺序栈--------------------------|\n");
printf("\t\t|\t\t\t\t\t |\n");
printf("\t\t|\t\t 1.顺序栈初始化 \t |\n");
printf("\t\t|\t\t 2.顺序栈的栈顶元素\t |\n");
printf("\t\t|\t\t 3.顺序栈的长度\t |\n");
printf("\t\t|\t\t 4.遍历顺序栈\t |\n");
printf("\t\t|\t\t 5.判断顺序栈是否满栈\t |\n");
printf("\t\t|\t\t 6.判断顺序栈是否为空\t |\n");
printf("\t\t|\t\t 7.进栈\t |\n");
printf("\t\t|\t\t 8.出栈\t |\n");
printf("\t\t|\t\t 9.摧毁顺序栈\t |\n");
printf("\t\t|\t\t\t\t\t |\n");
printf("\t\t|-----------------------------------------------|\n\n");
printf("\t\t\t请选择(1-9):");
int n;
scanf("%d",&n);
switch(n){
case 1:
system("cls");
if(Initial(S))
printf("初始化成功\n");
printf("按任意键返回菜单....");
getchar();
getchar();
menu(S);
case 2:
system("cls");
if(!Gettop(S))
printf("栈空");
else
printf("栈顶元素为:%d\n",Gettop(S));
printf("按任意键返回菜单....");
getchar();
getchar();
menu(S);
case 3:
system("cls");
printf("栈的长度为:%d\n",length(S));
printf("按任意键返回菜单....");
getchar();
getchar();
menu(S);
case 4:
system("cls");
show(S);
printf("按任意键返回菜单....");
getchar();
getchar();
menu(S);
case 5:
system("cls");
if(Isfull(S))
printf("栈满");
else
printf("栈未满");
printf("按任意键返回菜单....");
getchar();
getchar();
menu(S);
case 6:
system("cls");
if(Isempty(S))
printf("栈空\n");
else
printf("栈不为空\n");
printf("按任意键返回菜单....");
getchar();
getchar();
menu(S);
case 7:
system("cls");
printf("请输入进栈元素:\n");
scanf("%d",&i);
if(Push(S,i))
printf("进栈成功\n");
else
printf("栈满,进栈失败\n");
printf("按任意键返回菜单....");
getchar();
getchar();
menu(S);
case 8:
system("cls");
if(Pop(S))
printf("出栈成功\n");
else
printf("栈空,请先初始化\n");
printf("按任意键返回菜单....");
getchar();
getchar();
menu(S);
case 9:
system("cls");
if(DestroyStack(S))
printf("摧毁成功");
printf("按任意键退出程序....");
getchar();
getchar();
exit(1);
}
}
int main(){
int i;
SeqStack *S;
S = (SeqStack *)malloc(sizeof(SeqStack));
S->top = -1;
menu(S);
}