[算法导论]第十章《栈和队列》
来源:互联网 发布:tcp默认端口号 编辑:程序博客网 时间:2024/06/05 02:30
1、栈和队列
栈和队列都是动态集合,且在其上进行DELETE操作所移除的元素的预先设定好的。栈规定元素是先进后出(FILO),队列规定元素是先进先出(FIFO)。栈和队列的实现可以采用数组和链表进行实现。
栈的基本操作包括入栈push和出栈pop,栈有一个栈顶指针top,指向最新如栈的元素,入栈和出栈操作操作都是从栈顶端进行的。
队列的基本操作包括入队enqueue和出队dequeue,队列有队头head和队尾tail指针。元素总是从队头出,从队尾入。采用数组实现队列时候,为了合理利用空间,可以采用循环实现队列空间的有效利用。
关于栈和队列的基本操作如下图所示:
栈的几种操作(伪代码):
队列的操作(伪代码):
代码的C++实现:
/* *Created by RogerKing *Email:jin_tengfei@163.com */#include <iostream>#include <string>using namespace std;/*****************栈*******************************************************/typedef struct Stack{int top;//栈顶指针int stacksize;int *s;//数组}Stack;//栈的初始化void Init_Stack(Stack *S){ S->stacksize = 100; S->s =(int*)malloc(sizeof(int)*S->stacksize); S->top = -1;}//打印栈void Print(Stack S){int i;cout<<"从栈底到栈顶的顺序输出:";for(i = 0; i <= S.top; i++)cout<<S.s[i]<<' ';cout<<endl;}//检查一个栈是否为空bool Stack_Empty(Stack *S){if(S->top == 0)return true;elsereturn false;}//入栈void Push(Stack *S, int x){S->top++;S->s[S->top] = x;}//出栈int Pop(Stack &S){if(Stack_Empty(&S)){cout<<"underflow"<<endl;exit(0);}else{S.top--;return S.s[S.top+1];}}/*****************队列********************************************************/typedef struct Queue{int tail;//队列头指针int head;//队列尾指针int length;//队列长度int *q;//数组}Queue;//从队列头到队列尾输出void Print(Queue Q){int i;cout<<"从队列头到队列尾:";if(Q.tail >= Q.head){for(i = Q.head; i < Q.tail;i++)cout<<Q.q[i]<<' ';cout<<endl;}//因为循环的原因,队列尾可能在队列头的前面else{for(i = Q.head; i <= Q.length; i++)cout<<Q.q[i]<<' ';for(i = 1; i < Q.tail; i++)cout<<Q.q[i]<<' ';cout<<endl;}}//入队列void Enqueue(Queue *Q, int x){Q->q[Q->tail] = x;if(Q->tail == Q->length)Q->tail = 1;else Q->tail++;}//出队列int Dequeue(Queue &Q){int x = Q.q[Q.head];if(Q.head == Q.length)Q.head = 1;else Q.head++;return x;}int main(){// Stack s;//栈的测试// Init_Stack(&s);// Push(&s,12);// Push(&s,23);// Push(&s,34);// Push(&s,96);// Push(&s,65);// Print(s);// cout<<"top is:"<<Pop(s)<<endl; Queue q;//队列测试 q.length=10; q.q = (int*)malloc(sizeof(int)*q.length); q.head=0; q.tail=0; Enqueue(&q,10); Enqueue(&q,30);cout<<"head="<<q.head<<",tail="<<q.tail<<endl;Print(q);cout<<"删除队列元素:"<<Dequeue(q)<<endl;cout<<"head="<<q.head<<",tail="<<q.tail<<endl;}
0 0
- [算法导论]第十章《栈和队列》
- 算法导论第十章--队列的实现
- 算法导论第三版第十章 单链表实现栈和队列(思路简单清晰)
- 算法导论: 第十章
- 《算法导论》第十章——基本数据结构(一):栈与队列
- 算法导论第十章 基本数据结构实现(栈,队列,链表),课后题答案
- 算法导论 第10章 10.1 栈和队列
- 《算法导论》笔记 第10章 10.1 栈和队列
- 算法导论—栈和队列
- 算法导论第十章例题-栈的实现
- 算法导论-栈和队列的简单实现
- 算法导论程序20--栈和队列(Python)
- 算法导论第10章-基本数据结构-10.1栈和队列
- 算法导论第十章:基本数据结构
- 算法导论 第十章 基本数据结构
- 算法导论第十章习题10.4-2
- 算法导论第十章基本数据结构
- 算法导论 python代码 第十章
- [转]深入理解abstract class和interface
- ffmpeg废弃的接口
- Android 中的BroadCastReceiver
- NSNotificationCenter介绍
- 用回溯法(backtracking)解决平衡集合问题(一道微软公司面试题)
- [算法导论]第十章《栈和队列》
- hdu1016 Prime Ring Problem 素数环
- Java 算法题-01
- 智能手机控制电梯的可行性
- 土豪金的加密与解密
- makefile问题总结
- 摩根士丹利华鑫基金公司面试
- A-MKL
- win7找回输入法显示方法一