数据结构 栈的顺序存储结构 c语言版
顺序栈的初始化,创建,压入数据,取出数据,删除,遍历输出,销毁等操作
C代码
#include<stdio.h>
#include<stdlib.h>
#define Maxsize 10
typedef int ElemType;
typedef struct {
int top;
ElemType data[Maxsize];
}stack,*Sqstack;
initstack(Sqstack &S);
push(Sqstack &S,int i);
pop(Sqstack &S, int i);
void Displystack (Sqstack &S);
void destroystack(Sqstack &S);
initstack(Sqstack &S)
{
S=(stack *)malloc(sizeof(stack *));//分配空间
S->top = 0; //初始化栈顶指针
printf("初始化成功!\n");
return 1;
}
push(Sqstack &S, int i )
{
for(int j=0;j<i;j++){
if (S->top == (Maxsize)){
printf("表满了\n");
return 0;
}
stack *SpStack = (stack *)malloc(sizeof(stack *));
printf("请输入第 %d 个要插入的数据:",j+1);
scanf("%d",&S->data[++S->top]); //指针加1,入栈
}
printf("压入成功!\n");
return 1;
}
pop(Sqstack &S, int i)
{
for(int j=0;j<i;j++){
if (S->top == NULL) {
printf("栈已空!\n");
return 0;
}
printf("%d 以出栈\n",S->data[S->top--]);//出栈,指针减1
}
return 1;
}
void DisplyStack (Sqstack &S)
{
int p=S->top;
printf("从栈顶由上往下依次输出:");
while(p != NULL){
printf(" %d ",S->data[p--]);
}
printf("\n");
}
void destroystack(Sqstack &S)
{
S->top=NULL;
free(S); //释放空间
printf("销毁成功!\n");
}
int main()
{
ElemType e;
Sqstack S;
int i;
printf("\n\n\n");
printf("\n\t\t\t\t\t\t1.创建顺序栈");
printf("\n\t\t\t\t\t\t2.栈顶压入元素");
printf("\n\t\t\t\t\t\t3.取出栈顶元素");
printf("\n\t\t\t\t\t\t4.输出栈内数据");
printf("\n\t\t\t\t\t\t5.销毁顺序栈");
printf("\n\t\t\t\t\t\t6.退出\n\n");
while(1)
{
printf("\n请选择您想选择的操作: ");
int k;
scanf("%d",&k);
switch(k)
{
case 1:
initstack(S);
break;
case 2:
printf("输入你想压入的个数:");
scanf("%d",&i);
push(S,i);
break;
case 3:
printf("输入你想取出的个数:");
scanf("%d",&i);
pop(S,i);
break;
case 4:
DisplyStack(S);
break;
case 5:
destroystack(S);
break;
case 6:
return 0;
break;
}
}
}