栈的顺序存储实现
来源:互联网 发布:齐鲁石化网络电视台 编辑:程序博客网 时间:2024/04/18 11:32
栈是一种重要的线性结构。从数据结构的角度讲,栈是线性表其特殊性在于栈的基本操作是线性表操作的子集,是操作受限的线性表。栈的特点是仅在表尾进行插入和删除操作的线性表,表尾是栈顶(top),表头是栈底,遵循后进先出的原则。因为栈是特殊的线性表,所以栈的实现也可以通过两种方式:顺序存储和链式存储。这里主要讲栈的顺序存储实现,进行的操作主要包括:初始化、取栈顶、入栈、出栈、计算栈长度、销毁栈。
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define STACK_INIT_SIZE 100//存储空间初始分配量#define STACKINCREMENT 10//存储空间分配增量#define OVERFLOW 1#define OK 0#define ERROR -1typedef int SElemType;typedef int Status;typedef struct{ SElemType *base;//在构造之前和销毁之后,base的值为NULL SElemType *top;//栈顶指针 int stacksize;//当前已分配的存储空间}SqStack;//栈的初始化Status InitStack(SqStack *S){ S->base=(SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!S->base) exit(OVERFLOW); S->top = S->base; S->stacksize = STACK_INIT_SIZE; return OK;}//获取栈顶元素Status GetTop(SqStack *S){ SElemType e; if(S->top == S->base) return ERROR; e=*(S->top -1); printf("栈顶元素是%d\n",e); return OK;}//压栈Status Push(SqStack *S,SElemType e){ if((S->top - S->base) >= (S->stacksize))//栈满,追加新的存储空间 { S->base = (SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S->base) exit(OVERFLOW); S->top = S->base + S->stacksize; S->stacksize += STACKINCREMENT; } *S->top++ =e;//栈顶元素为e return OK;}//弹栈Status Pop(SqStack *S){ if(S->top == S->base) return ERROR; SElemType e = *--S->top;//将栈顶元素弹出 printf("%d",e); return OK;}//计算栈的长度int StackLength(SqStack *S){ int i=0; SElemType *p; p=S->top; if(p!=S->base) { p++; i++; } return i;}//销毁栈Status DestroyStack(SqStack *S){ if(S->top!=S->base) { free(S->top); S->top = S->base; S->stacksize=0; } printf("Destroy Stack\n"); return OK;}int main(){ SqStack *S; int i; //int n=0; S=(SqStack *)malloc(sizeof(SqStack)); InitStack(S); for(i=0;i<5;i++) Push(S,i); GetTop(S); printf("栈元素长度是:%d\n",StackLength(S)); printf("弹栈所有的元素是:"); while(S->top != S->base) { Pop(S); } printf("\n"); DestroyStack(S); return 0;}
0 0
- 栈的顺序存储实现
- 栈的顺序存储实现
- 栈的顺序存储实现
- 栈的顺序存储实现
- 栈的顺序存储实现
- 栈的顺序存储实现
- 栈的顺序存储实现
- 栈的顺序存储结构的实现
- 栈的顺序存储的实现代码
- 栈的顺序存储的代码实现
- 顺序栈存储实现
- 顺序存储实现栈
- 栈的顺序存储实现和链式存储实现
- 栈的顺序存储结构---顺序栈的实现
- 栈的顺序存储结构实现
- 数据结构:栈的顺序存储实现
- 栈的顺序存储结构和实现
- 线性结构--->栈的顺序存储实现
- weka中的各算法说明
- 如何阅读一个复杂的类型
- 对象的序列化与反序列化---IO学习笔记(四)
- [ACM] hdu 1242 Rescue (BFS+优先队列)
- SpringMVC 集成JSR303数据校验
- 栈的顺序存储实现
- HDU 1874--畅通工程续【最短路 && floyd && 水题】
- [ACM] hdu 2717 Catch That Cow (BFS)
- Get Luffy Out (poj 2723 二分+2-SAT)
- LeetCode之Recover Binary Search Tree
- OC之集合家族
- machine learning in coding(python):拼接原始数据;生成高次特征
- [ACM] hdu 1035 Robot Motion (模拟或DFS)
- c++学习笔记