栈的基本操作
来源:互联网 发布:火车时刻表软件 编辑:程序博客网 时间:2024/06/07 23:06
栈是一种只允许在一端进行插入和删除操作的线性表,在表中只允许进行插入和删除的一端称为栈顶,另一端称为栈底。
栈具有“先进后出”的特性,即,先入栈的被压入栈底,后入栈的在栈顶。
栈的存储结构有两个,顺序存储和链式存储。
(1)栈的顺序存储结构
利用顺序存储方式实现的栈称为顺序栈。栈中数据元素用一个预设的足够长度的一维数组来实现。栈顶随着插入和删除而变化。
顺序栈的类型描述如下:
typedef struct { datatype data[MAXSIZE]; int top; //栈顶}SeqStack;
定义一个指向顺序栈的指针: SeqStack *s;
示意图:
顺序栈基本操作
1.初始化
置空栈:初始化栈顶指针。
/*初始化*/SeqStack *initStack(){ SeqStack *s; s = (SeqStack *)malloc(sizeof(SeqStack)); //动态申请内存 s->top = -1; //空栈时,栈顶指针top=-1 return s;}
2.进栈:首先判断栈是否满了,如果栈满,返回false。否则进栈。
/*进栈*/void push( SeqStack *s, datatype x ){ if( s->top >= MAXSIZE-1 ){ //判断栈满 printf("栈满!"); }else{ s->top++; s->data[s->top] = x; }}
3.取栈顶元素
/*取栈顶元素*/int topStack( SeqStack *s ){ datatype x; if( isEmpty(s) ){ //判断栈是否为空 printf("栈空"); }else{ return x = s->data[s->top]; } }
4.判断栈是否为空
/*判断栈是否为空*/ int isEmpty( SeqStack *s ){ if( s->top == -1 ){ return true; //栈空 }else{ return false; } }
5.出栈
/*出栈*/void pop( SeqStack *s, datatype *x ){ if( isEmpty(s) ){ //判断栈空 printf("栈空"); }else{ *x = s->data[s->top]; //将栈顶元素存入*x中 s->top--; } }
(2)栈的链式存储方式
链式栈的类型描述如下:
typedef struct StackNode{ Elemtype data; struct StackNode *next;}StackType;
示意图:
链式栈的基本操作
入栈
//入栈int push(StackType *top, ElemType x){ //将元素x压入链栈top中 StackType *p; if( p = (StackTpe *)malloc(sizeof(StackType)) == NULL ){ return false; } //申请一个结点 p->data = x; p->next = top->next; top->next = p; return true;}
出栈
//出栈ElemType pop(StackType *top){ StackType *p; ElemType x; //从top中删除栈顶元素 if( top->next == NULL ){ return NULL; } p = top->next; top->next = p->next; x = p->data; free(p); return x;}
(完)
阅读全文
0 0
- 栈的基本操作
- 栈的基本操作
- 栈 的基本操作。
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- element UI+七牛云快速搭建图片服务器
- 新知识杂记-2017/5/17
- 分形理论入门
- 多线程并行与退出
- KVC KVO 高阶应用
- 栈的基本操作
- 公共技术点之 View 事件传递
- CodeForces
- 给定先序和后续,构造出一颗二叉树并输出中序序列
- Python数据结构—-栈
- 使用对象流把对象保存到文本中
- 使用DevExpress的PdfViewer控件加载http传输文件
- win10安装winmerge 启动出错
- javascript判断数组中是否存在某个值