c语言栈基础,C语言基础入栈,出栈操作

#include#define ERROR -1

typedef int ElementType;

typedef enum {

push, pop, end

} Operation;

/*typedef enum {

false, true

} bool;*/

typedef int Position;

typedef struct SNode *PtrToSNode;

struct SNode {

ElementType *Data; /* 存储元素的数组 */

Position Top; /* 栈顶指针 */

int MaxSize; /* 堆栈最大容量 */

};

typedef PtrToSNode Stack;

//初始化栈

Stack CreateStack(int MaxSize)

{

//准备存放结构体型的变量数据

Stack S = (Stack)malloc(sizeof(struct SNode));

//动态申请数组空间

S->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));

//把栈顶指针指向0

S->Top = 0;

//给MaxSize赋值

S->MaxSize = MaxSize;

return S;

}

//入栈

bool Push(Stack S, ElementType X)

{

//判断栈顶是否与栈容量相等

if (S->MaxSize == S->Top)

{

//输出Stack Full

puts("Stack Full");

return 0;

}

//不相等则栈顶指针+1

S->Data[S->Top++]=X;

return 1;

}

//出栈

ElementType Pop(Stack S)

{

//判断栈顶是否为空

if (!S->Top)

{

//输出Stack Empty

puts("Stack Empty");

//返回ERROR

return ERROR;

}

//返回栈顶元素

return S->Data[--S->Top];

}

Operation GetOp()

{

//定义字符数组a

char a[11];

//把接收的字符串写入字符数组

scanf("%s", a);

//判断push, pop, end是哪一个,并返回push, pop, end其中一个

if (!strcmp("Push", a))

return push;

if (!strcmp("Pop", a))

return pop;

if (!strcmp("End", a))

return end;

}

//打印栈内元素

void PrintStack(Stack S)

{

while (S->Top)

{

printf("%d ", S->Data[--S->Top]);

}

puts("");

}

int main()

{

ElementType X;

Stack S;

int N, done = 0;

//接收栈容量

scanf("%d", &N);

//把栈初始化

S = CreateStack(N);

//循环操作栈,直到done=1;

while (!done) {

//根据输入操作进行选择对应操作

switch (GetOp()) {

//入栈

case push:

scanf("%d", &X);

Push(S, X);

break;

//出栈

case pop:

X = Pop(S);

//出栈元素打印

if (X != ERROR) printf("%d is out\n", X);

break;

//结束程序,打印栈内元素

case end:

//打印栈内元素

PrintStack(S);

done = 1;

break;

}

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值