线性表(List)---栈的顺序存储
2017-07-16 02:00
405 查看
栈的顺序存储结构的设计与实现
栈的介绍
栈的定义: 栈是一种特殊的线性表,栈只能在栈顶一段进行操作(先进后出)。栈顶(Top): 允许操作的一端。
栈底(Bottom): 不允许操作的一端。
栈的常用操作
(1)创建栈
(2)销毁栈
(3)清空栈
(4)入栈
(5)出栈
(6)获取栈顶元素
(7)获取栈的大小
栈顺序存储结构的设计
栈的顺序存储模型我们可以重复利用之前写过的线性表顺序存储中的代码,在此基础上实现栈的顺序存储。
栈顺序存储结构的实现
SeqStack.h#ifndef _SEQSTACK_H_ #define _SEQSTACK_H_ typedef void SeqStack; typedef void SeqStackNode; //创建栈 SeqStack *SeqStack_Create(int capacity); //销毁栈 void SeqStack_Destroy(SeqStack *stack); //清空栈 void SeqStack_Clear(SeqStack *stack); //向栈中压入元素 int SeqStack_Push(SeqStack *stack, SeqStackNode *item); //从栈中弹出元素 SeqStackNode *SeqStack_Pop(SeqStack *stack); //获取栈顶元素 SeqStackNode *SeqStack_Top(SeqStack *stack); //获取栈的大小 int SeqStack_Size(SeqStack *stack); //获取栈的容量 int SeqStack_Capacity(SeqStack *stack); #endif // !_SEQSTACK_H_
SeqStack.c
#include <stdio.h> #include <string.h> #include <stdlib.h> #include "SeqStack.h" #include "seqlist.h" //创建栈相当于创建一个线性表 SeqStack *SeqStack_Create(int capacity) { return SeqList_Create(capacity); } //销毁栈相当于销毁线性表 void SeqStack_Destroy(SeqStack *stack) { SeqList_Destroy(stack); return; } //清空栈相当于清空线性表 void SeqStack_Clear(SeqStack *stack) { SeqList_Clear(stack); return; } //向栈中压入元素相当于往线性表尾部插入元素 int SeqStack_Push(SeqStack *stack, SeqStackNode *item) { return SeqList_Insert(stack, item, SeqList_Length(stack)); } //从栈中弹出元素相当于从线性表尾部删除元素 SeqStackNode *SeqStack_Pop(SeqStack *stack) { return SeqList_Delete(stack, SeqList_Length(stack) - 1); } //获取栈顶元素x相当于获取线性表尾部的元素 SeqStackNode *SeqStack_Top(SeqStack *stack) { return SeqList_Get(stack, SeqList_Length(stack) - 1); } //获取栈的大小相当于获取线性表的实际长度 int SeqStack_Size(SeqStack *stack) { return SeqList_Length(stack); } //获取栈的容量相当于获取线性表的容量 int SeqStack_Capacity(SeqStack *stack) { return SeqList_Capacity(stack); }
SeqStack集成测试框架.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "SeqStack.h" void main() { int i = 0, ret = 0, a[10]; int *tmp = NULL; SeqStack *stack = SeqStack_Create(10); if (stack == NULL) { printf("func SeqStack_Create() (stack == NULL) err\n"); return; } for (i = 0; i < 5; i++) { a[i] = i + 1; ret = SeqStack_Push(stack, (SeqStackNode *)&a[i]); if (ret != 0) { printf("func SeqStack_Push() err:%d\n",ret); return; } } printf("Capacity:%d\n", SeqStack_Capacity(stack)); printf("Length:%d\n", SeqStack_Size(stack)); printf("Top:%d\n", *((int *)SeqStack_Top(stack))); while (SeqStack_Size(stack)>0) { tmp = (int *)SeqStack_Pop(stack); if (tmp == NULL) { printf("func SeqStack_Pop() (tmp == NULL) err\n"); return; } printf("*tmp:%d\n", *((int *)tmp)); } return; }
结果截图
相关文章推荐
- 线性表顺序存储_List
- 线性表顺序存储(List)
- 大话数据结构 code 第3章 01线性表顺序存储_List
- 01线性表顺序存储_List--(线性表)
- 线性表(List)---队列的顺序存储
- 线性表的顺序存储
- 线性表顺序存储的优缺点
- 线性表顺序存储
- JavaScript描述数据结构之线性表(顺序存储)
- 线性表的顺序存储
- 线性表顺序存储插入和删除操作
- 线性表的顺序存储与链式存储
- 线性表的顺序存储伪算法代码和讲解
- 线性表-顺序存储
- 数据结构(严蔚敏)C语言实现---线性表的顺序存储
- 数据结构——线性表及线性表顺序存储
- 线性表(List)---链式存储(循环链表)
- 线性表的顺序存储
- 线性表的顺序存储
- 对List及类似于线性表的元素 删除的顺序的考虑