大话数据结构读书笔记(3)----栈和链表
2017-10-08 16:49
260 查看
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、队列的链式存储结构及实现
队列的链式存储结构,其实就是线性表的单链表,只能尾进头出,简称为链队列。链队列的入队和出队操作代码如下:
4000
在可以确定队列长度最大值的情况下,建议使用循环队列,如果无法预知队列的长度,则用链队列。
相关文章推荐
- 栈和队列(链表)
- ***UVa11988 Broken Keyboard ACM解题报告(链表)
- c 链表
- 动态链表链表
- 算法大全(1)单链表
- 输出单链表中倒数第k个结点
- 链表的基本排序
- 【C语言数据结构】静态单链表
- 数据结构与算法3:链表1
- 翻转部分链表
- 链表基本操作
- 链表-单向链表&&UVa 11988 Broken Keyboard(a.k.a.Beijiu Text)(破损的键盘(悲剧文本))的理解与解析
- 数据结构实验之链表一:顺序建立链表
- 单链表的逆序
- 使用tcl/expect实现对链表反转
- 链表两两交换节点
- 基于C语言链表实现的工作任务注册与执行
- 单向链表的python实现
- 寒假第二天--线性表--数据结构上机测试2-1:单链表操作A
- C语言之单向链表