结构体定义时写数据_定义和实现栈这种数据结构来说明抽象数据类型是如何建立的...

抽象数据类型允许用户在不了解数据类型在计算机中的表示方式的情况下操作数据类型。换句话说,就用户而言,他需要知道的只是可以对数据类型执行的操作。实现数据类型的人可以自由地更改其实现,而不会影响用户。

作为一个线性列表的堆栈,其中的项在一端添加并从同一端删除。这一想法是由一个放在桌子上的“一叠盘子”来说明的,一个放在另一个上面。当需要一个盘子时,它从栈顶取下。当一个盘子被清洗时,它被添加到堆栈的顶部。请注意,如果现在需要一个盘子,那么这个“最新”的盘子就是所取的盘子。堆栈显示“后进先出”属性。

堆栈就是一种抽象数据类型。

栈的应用场景(保存暂时不用的数据或存储地址):I 软件撤销功能,浏览器后退、前进功能;II 括号匹配、表达式求值;III 数制转换;IV 函数调用、递归调用;V 辅助其它数据结构,如二叉树遍历;VI 迷宫求解;

堆栈可以用链表实现,也可以用数组实现:

1 用结构体来定义栈(当然类是一种更好的抽象数据类型)

typedef struct {int top;//记录数组下标位置int ST[MaxStack];} StackType, *Stack;

2 栈初始化

Stack initStack() {Stack sp = (Stack) malloc(sizeof(StackType));sp -> top = -1;return sp;}

3 用初始来定义一个栈变量

Stack S = initStack();

328d00f552659ceb0e75eee8cc03be57.png

4 判断栈是否为空

int empty(Stack S) {return (S -> top == -1);}

5 在栈顶增加元素

void push(Stack S, int n) {if (S -> top == MaxStack - 1) {printf("Stack Overflow");exit(1);}++(S -> top);//下标移动S -> ST[S -> top] = n;}

如做以下操作:

push(S,3);push(S,36);push(S,15);push(S,52);push(S,23);
c78f78569df9a398946f513b937f3ace.png

6 在栈顶删除元素

int pop(Stack S) {if (empty(S)) return RogueValue; //a symbolic constantint hold = S -> ST[S -> top];--(S -> top);//下标移动return hold;}

完整代码:

#include #include #define RogueValue -9999#define MaxStack 10typedef struct {int top;int ST[MaxStack];} StackType, *Stack;Stack initStack();int empty(Stack);void push(Stack, int);int pop(Stack);int main() {int n;Stack S = initStack();printf("Enter some integers, ending with 0");scanf("%d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值