Stack
顺序栈的基本操作
栈和堆的基本概念
堆和栈可以分为两种:一种是数据结构另一种是和内存的分配有关,这两种虽然都有栈和堆,但是两者关系并不大
栈:堆是数据结构里面的叫法,有时候有人喜欢这样说 “堆栈” 其实说的就是栈而不是堆。
栈区:堆区 则是内存模型的叫法。堆栈绝对是一个不容忽视的概念,并且在写 C 的时候也会频繁用到。但对大多数 C 初学者来说,堆栈却是一个很模糊的概念。堆栈:一种数据结构,一个在程序运行时用于存放的地方,这可能是很多初学者共同的认识,也是大部分教科书对“堆栈”的解释。很显然用这么简单的概括来解释“堆栈”是不合适的。
简而言之:栈是一种只能从表的一端存取数据且遵循 “先进后出” 原则的线性存储结构;
入栈(push推送)
顺序栈,即用顺序表实现栈存储结构,而顺序表的底层实现是用数组实现的;
此时为空栈;
数据入栈的代码实现为:
//入口参数是数组首元素地址,栈顶和压入元素,返回值是数值增加的栈顶
int push(int *a, int top, int elem) {
a[++top] = elem;
return top;
}
出栈(pop弹出)
就是将数组的长度剪短(top–)
//入口参数是数组首元素地址和栈顶,返回值是数值减少的栈顶
int pop(int *a, int top) {
if (top == -1) {
printf("空栈");
return -1;
}
printf("%d\n", a[top]);
top--;
return top;
}
链栈的基本操作
链栈元素入栈
顺序栈的操作是通过数组实现的吗,而链栈的实现是通过链表实现的;
关于链表的相关知识,参考链接: 单链表的基本操作——基于C语言.
链栈实际上就是一个只能采用头插法插入或删除数据的链表。
代码实现: