算法导论第10章-基本数据结构-10.1栈和队列
2014-10-29 08:49
239 查看
1.栈
(1)栈实现了后进先出操作。在栈的数组实现中,栈顶指针指向栈顶元素,插入时先修改指针再插入,删除时先取栈顶元素再修改指针。
当top[S]=0时,栈中空的。
(2)数组栈的结构:
int top;//栈顶指针
int *s];//指向栈数组
(3)在栈上实现的操作
STACK-EMPTY(S)//判断栈是否为空
PUSH(S, x) //把x压入到栈顶
POP(S) //取出并返回栈顶元素
<span style="font-size:10px;">#include <iostream> #include <stdio.h> #include <string> using namespace std; //数据结构 struct stack { int top;//栈顶 int *s;//数组 stack(int size):top(0){s = new int[size+1];} // ~stack(){delete []s;} }; void Print(stack S) { int i; //从栈底到栈顶的顺序输出 for(i = 1; i <= S.top; i++) cout<<S.s[i]<<' '; cout<<endl; } //检查一个栈是否为空 bool Stack_Empty(stack &S) { if(S.top == 0) return true; else return 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]; } } int main() { stack s(10); for(int i=0;i<10;i++) { int num; cin>>num; Push(s,num); } //从底到顶输出栈 Print(s); //从顶到底出栈 for(int i=0;i<10;i++) cout<<Pop(s)<<' '; cout<<endl; }</span>
2.队列
(1)队列实现了先进先出操作。在队列的数组实现中,队列的头指针指向队列首元素,删除时先取队列首元素再修改指针,队列的尾指针指向队尾元素的下一个元素,插入时先插入再修改指针
当top[S]=0时,栈中空的。
(2)数组队列的结构:
int tail;//队列尾,指向最新进入的元素
int head;//队列头,指向最先出的元素
int length;//队列的长度
int *s;//指向数组队列
(3)在队列上实现的操作
ENQUEUE(Q, x) //把x插入到队列尾
DEQUEUE(Q) //取出队列首元素并返回
#include <iostream> #include <stdio.h> #include <string> using namespace std; //队列的数据结构,队列的头指向数组第一个元素,队列的尾指向数组最后一个元素的下一个 struct queue { int tail;//队列头指针 int head;//队列尾指针 int length;//队列长度 int *s;//数组队列 queue(int size):tail(1),head(1),length(size){s = new int[size];} }; //从队列头到队列尾输出 void Print(queue Q) { int i; if(Q.tail >= Q.head) { for(i = Q.head; i < Q.tail;i++) cout<<Q.s[i]<<' '; cout<<endl; } //因为循环的原因,队列尾可能在队列头的前面 else { for(i = Q.head; i <= Q.length; i++) cout<<Q.s[i]<<' '; for(i = 1; i < Q.tail; i++) cout<<Q.s[i]<<' '; cout<<endl; } } //判断队列是否为空 bool Queue_Empty(queue Q) { if(Q.tail == Q.head) return 1; return 0; } //入队列,tail达到尾的时候,重新回到最开始处,此时可能tail<head void Enqueue(queue &Q, int x) { Q.s[Q.tail] = x; if(Q.tail == Q.length) Q.tail = 1; else Q.tail++; } //出队列 int Dequeue(queue &Q) { int x = Q.s[Q.head]; if(Q.head == Q.length) Q.head = 1; else Q.head++; return x; } int main() { queue q(10); for(int i=1;i<16;i++) Enqueue(q,i); //此时队列为11,12,13,14,15,6,7,8,9,10 cout<<q.head<<' '<<q.tail<<' '<<endl; //head=1,tail=6 //从队列头到队列尾输出 Print(q); //11,12,13,14,15 //从head往后数7个出队,原数组没变,只是head和tail变了 for(int i=0;i<7;i++) cout<<Dequeue(q)<<' '; //出队数为11,12,13,14,15,6,7,head=8,tail=6 cout<<endl; cout<<q.head<<' '<<q.tail<<' '<<endl; Print(q); //打印出8-10,1-5,为8,9,10,11,12,13,14,15 }
转自:http://blog.csdn.net/mishifangxiangdefeng/article/details/7693200
相关文章推荐
- 算法导论第10章 基本数据结构
- 算法导论第十章 基本数据结构实现(栈,队列,链表),课后题答案
- 《算法导论》读书笔记之第10章 基本数据结构
- 算法导论第10章 基本数据结构之二叉树
- 算法导论学习笔记——第10章 基本数据结构
- 《算法导论》第10章 基本数据结构 (2)链表
- 《算法导论》第10章 基本数据结构 (2)链表
- 算法导论 第10章 基本数据结构
- 第10章,基本数据结构(栈,队列)
- 《算法导论》第10章 基本数据结构 (2)链表
- 栈与队列_第10章_基本数据结构_算法导论
- 《算法导论》读书笔记之第10章 基本数据结构之二叉树
- 算法导论代码 第10章 基本数据结构
- CLRS第10章 基本数据结构——栈和队列
- 算法导论第10章基本数据结构10.1栈
- 算法导论答案 第10章:基本数据结构
- 《算法导论》第十章——基本数据结构(一):栈与队列
- 《算法导论》第10章 基本数据结构 (2)链表
- 数据结构--顺序队列基本操作
- 算法导论 第10章 10.1 栈和队列