大话数据结构读书笔记(3)----栈和链表
来源:互联网 发布:quick report软件下载 编辑:程序博客网 时间:2024/05/26 19:14
1、栈的定义
栈(stack)是限定仅在表尾进行插入和删除操作的线性表。
通常把允许插入和删除的一端成为栈顶(top),另一端称为栈底(bottom),栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。
2、栈的顺序存储结构及实现
对于栈的插入(进栈),相当于做了如下处理。
对于进栈操作push,其代码如下:
/*插入元素e为新的栈顶元素*/Status Push(SqStack *S,SElemType e){ if(S->top==MAXSIZE-1) { return ERROR; } S->top++; S->data[S->top]=e; return OK;}
对于出栈操作pop,其代码如下:
/*若栈不空,则删除S的栈顶元素,用e返回,否则返回ERROR*/Status Push(SqStack *S,SElemType e){ if(S->top==-1) { return ERROR; } *e=S->data[S->top]; S->top--; return OK;}
3、栈的链式存储结构及实现
对于链栈的进栈push操作,假设元素值为e的新节点为s,top为栈顶指针,代码如下:
/*插入元素e为新的栈顶元素*/Status Push(LinkStack *S,SElemType e){ LinkStackPtr s=(LinkStackPtr)malloc(sizeof(StackNode)); s->data=e; s->next=S->top; S->top=s; S->count++; return OK;}
类似的出栈pop操作,假设变量p用来存储要删除的栈顶结点,将栈顶指针下移一位,最后释放p:
/*插入元素e为新的栈顶元素*/Status Push(LinkStack *S,SElemType *e){ LinkStackPtr p; if(StackEmpty(*S)) return ERROR; *e=s->top->data; p=S->top; S->top=S->top->next; free(p); S->count--; return OK;}
4、队列的定义
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。
如果队列的总个数不超过5个,但目前下标为2,3,4的位置已经被占用,接着入队的话就会产生输入越界的错误,可实际上,队列在下标为0和1的地方还是空闲的,如下图所示,这种现象叫做“假溢出”。
解决假溢出的方法就是后面满了,再从头开始,也就是头尾相接的循环。这种头尾相接的顺序存储结构称之为循环队列
循环队列的入队列操作代码如下:
/*若队列未满,则插入元素e为Q新的队尾元素*/Status EnQueue(SqQueue *Q,QElemType e){ if((Q->rear+1)%MAXSIZE==Q->front) return ERROR; Q->data[Q->rear]=e; Q->rear=(Q->rear+1)%MAXSIZE; return OK;}
循环队列的出队列操作代码如下:
/*若队列不空,则删除Q中队头元素,用e返回其值*/Status EnQueue(SqQueue *Q,QElemType e){ if(Q->rear==Q->front) return ERROR; *e=Q->data[Q->front]; Q->front=(Q->front+1)%MAXSIZE; return OK;}
5、队列的链式存储结构及实现
队列的链式存储结构,其实就是线性表的单链表,只能尾进头出,简称为链队列。
链队列的入队和出队操作代码如下:
在可以确定队列长度最大值的情况下,建议使用循环队列,如果无法预知队列的长度,则用链队列。
阅读全文
0 0
- 大话数据结构读书笔记(3)----栈和链表
- 大话数据结构读书笔记(四)-栈和队列
- 大话数据结构读书笔记 2 ---栈和队列
- 【读书笔记】大话数据结构之 栈(1)
- 大话数据结构读书笔记(三)-线性表
- 《大话数据结构》读书笔记之栈抽象数据类型(链表实现)
- 大话数据结构读书笔记 3---串
- 《大话数据结构》读书笔记(一)
- 《大话数据结构》读书笔记(二)
- 《大话数据结构》读书笔记(三)
- 《大话数据结构》读书笔记(四)
- 《大话数据结构》读书笔记(五)
- 《大话数据结构》读书笔记(1)
- 《大话数据结构》读书笔记(2)
- 《大话数据结构》读书笔记(一)
- 《大话数据结构》读书笔记(二)
- 《大话数据结构》读书笔记(三)
- 《大话数据结构》读书笔记之串和源码
- 基于CC2640的智能自行车(代码+APP)
- Mac系统升级后eclipse菜单无法使用解决方案
- 深搜专题(DFS大法好!)
- Microsoft SQL Server学习(五)--操作符聚合函数
- 排队论中的常见分布:泊松分布、指数分布与爱尔朗分布
- 大话数据结构读书笔记(3)----栈和链表
- 并行计算omp
- 排序算法总结
- 流媒体直播之一流媒体直播实现的整体方案和思路
- 一场简单前端讲座
- 助教工作体会
- Java计算圆周率
- idea常用快捷键
- 【面向HTML5--地理定位】