#include <stdio.h>
#include <stdlib.h>
struct SeqStack{
int MAXNUM;
int t; /* 栈顶位置,而不是元素*/
int *s;
};
typedef struct SeqStack *PSeqStack; /* 顺序栈类型的指针类型 ,,重命名 */
PSeqStack createEmptyStack_seq(int m) /*创建一个空栈*/
{
PSeqStack stack = (PSeqStack)malloc(sizeof(struct SeqStack)); /* 申请 该结构的 空间*/
if(stack->t!=-1){ /*创建一个空栈,将栈顶元素赋值为 -1 !=-1 即是不是空栈*/
stack->s=(int)malloc(sizeof(int)*m); /* 申请 m 大小的 该类型空间*/
if(stack->s){
stack->MAXNUM=m;
stack->t=0;
return stack;
}
else free(stack);
}
printf("Out of space!\n");
return NULL;
}
int isEmptyStack_seq(PSeqStack pastack) /*判断栈是否为空*/
{
return(pastack->t==-1); /*判断是否为空栈,是空栈返回 -1,,,否则返回 0 */
}
void push_seq(PSeqStack pastack,int x) /*进栈*/
{
if(pastack->t>=pastack->MAXNUM)
printf("Overflow!\n");
else{
pastack->t=pastack->t+1; /*当栈不满时,先修改栈顶变量,将其值 +1, */
pastack->s[pastack->t]=x; /*然后把x 元素放入栈顶所指的位置中。*/
}
}
void pop_seq(PSeqStack pastack) /*出栈*/
{
if(pastack->t==-1){
printf("Underflow!\n");
}
else{
pastack->t=pastack->t-1; /*将栈顶元素下移一个位置 但是实际上该数据元素还占据原来的位置,当新的元素进栈时将全覆盖 */
}
}
int top_seq(PSeqStack pastack) /*取出栈顶元素*/
{
if(pastack->t==-1)
printf("It is empty!\n");
else /*栈不为空的时候,将栈顶元素取出,而栈本身并未发生变化*/
return(pastack->s[pastack->t]);
}
int main()
{
int n,m=1;
printf("您需要多大空间的栈:\n");
scanf("%d",&n);
PSeqStack A=createEmptyStack_seq(n);
while(m==1){
printf("\n请选择您需要执行操作\n");
printf("1:打印:\n");
printf("2:入栈:\n");
printf("3:出栈:\n");
printf("4:取栈顶元素:\n");
int op;
int a,i,j,k;
scanf("%d",&op);
switch(op){
case 1:
printf("打印:");
j=A->t;
for(i=1;i<=j;i++)
printf("%d ",A->s[i]);
break;
case 2:
printf("入栈:");
for(k=0;k<A->MAXNUM;k++){
printf("\n请输入:");
scanf("%d",&a);
push_seq(A,a);
}
break;
case 3:
printf("出栈\n");
printf("%d\n",A->s[A->t]);
pop_seq(A);
break;
case 4:
printf("取栈顶元素:\n");
top_seq(A);
printf("%d\n",A->s[A->t]);
break;
}
printf("\n继续操作请输入“1”,退出输入“0”\n");
scanf("%d",&m);
}
printf("\ 退出操作");
}
#include <stdlib.h>
struct SeqStack{
int MAXNUM;
int t; /* 栈顶位置,而不是元素*/
int *s;
};
typedef struct SeqStack *PSeqStack; /* 顺序栈类型的指针类型 ,,重命名 */
PSeqStack createEmptyStack_seq(int m) /*创建一个空栈*/
{
PSeqStack stack = (PSeqStack)malloc(sizeof(struct SeqStack)); /* 申请 该结构的 空间*/
if(stack->t!=-1){ /*创建一个空栈,将栈顶元素赋值为 -1 !=-1 即是不是空栈*/
stack->s=(int)malloc(sizeof(int)*m); /* 申请 m 大小的 该类型空间*/
if(stack->s){
stack->MAXNUM=m;
stack->t=0;
return stack;
}
else free(stack);
}
printf("Out of space!\n");
return NULL;
}
int isEmptyStack_seq(PSeqStack pastack) /*判断栈是否为空*/
{
return(pastack->t==-1); /*判断是否为空栈,是空栈返回 -1,,,否则返回 0 */
}
void push_seq(PSeqStack pastack,int x) /*进栈*/
{
if(pastack->t>=pastack->MAXNUM)
printf("Overflow!\n");
else{
pastack->t=pastack->t+1; /*当栈不满时,先修改栈顶变量,将其值 +1, */
pastack->s[pastack->t]=x; /*然后把x 元素放入栈顶所指的位置中。*/
}
}
void pop_seq(PSeqStack pastack) /*出栈*/
{
if(pastack->t==-1){
printf("Underflow!\n");
}
else{
pastack->t=pastack->t-1; /*将栈顶元素下移一个位置 但是实际上该数据元素还占据原来的位置,当新的元素进栈时将全覆盖 */
}
}
int top_seq(PSeqStack pastack) /*取出栈顶元素*/
{
if(pastack->t==-1)
printf("It is empty!\n");
else /*栈不为空的时候,将栈顶元素取出,而栈本身并未发生变化*/
return(pastack->s[pastack->t]);
}
int main()
{
int n,m=1;
printf("您需要多大空间的栈:\n");
scanf("%d",&n);
PSeqStack A=createEmptyStack_seq(n);
while(m==1){
printf("\n请选择您需要执行操作\n");
printf("1:打印:\n");
printf("2:入栈:\n");
printf("3:出栈:\n");
printf("4:取栈顶元素:\n");
int op;
int a,i,j,k;
scanf("%d",&op);
switch(op){
case 1:
printf("打印:");
j=A->t;
for(i=1;i<=j;i++)
printf("%d ",A->s[i]);
break;
case 2:
printf("入栈:");
for(k=0;k<A->MAXNUM;k++){
printf("\n请输入:");
scanf("%d",&a);
push_seq(A,a);
}
break;
case 3:
printf("出栈\n");
printf("%d\n",A->s[A->t]);
pop_seq(A);
break;
case 4:
printf("取栈顶元素:\n");
top_seq(A);
printf("%d\n",A->s[A->t]);
break;
}
printf("\n继续操作请输入“1”,退出输入“0”\n");
scanf("%d",&m);
}
printf("\ 退出操作");
}