/*
队列:分配一块连续的存储单元存放队列中的元素,并附设两个指针,分别指示队头元素,和队尾元素的存储位置,分别称为队头指针和队尾指针。
判断是否为空的条件:Q.front==Q.rear==0;
但是不能用Q.rear==maxSize来作为判断队列为空的条件。
有可能出现假溢出,
栈的应用:括号匹配,进制转换,迷宫求解
递归中的栈:
程序每一个递归调用自己的时候,都要创建一个工作记录,工作记录中是:递归调用的返回地址,使用的局部变量,传入的实际参数的副本等。
这些工作记录被保存成栈的形式,每次递归调用的时候,为该层创建的工作记录放在栈顶,使得存放的信息当前可用;
每当退出本层递归调用的时候,相应的工作记录从栈顶删除,上一层递归调用的工作单位为栈顶,从而使得与上一层有关的工作记录恢复可用。
计算机系统中的队列:
(1)解决主机与外部设备速度不匹配的问题
比如:主机和打印机之间速递不匹配的。打印数据缓冲区中所存在的数据就是一个队列。。
(2)CPU的资源竞争。
当有多个用户请求CPU 资源时,
*/
#include<iostream>
typedef int ElemType;
#define MaxSize 50 //定义队列中的最大元素
typedef struct{
ElemType data[MaxSize]; //以数组的形式存放队列中的元素
int front, rear; //指向头指针和
}SqQueue;
SqQueue Q;
void main(){
//初始化队列
Q.rear = Q.front = 0;
}
//判断是否为空
bool IsEmpty(SqQueue Q){
if (Q.rear == Q.front)
return true;
else
return false;
}
//进行入队,先判断尾元素所在位置,元素进入是否是空栈,非空时,然后队尾指针加1
bool InEqueue(SqQueue Q,int x){
if ((Q.rear + 1) % MaxSize == Q.front)
return false;
//队满
Q.data[Q.rear] = x;
Q.rear = (Q.rear + 1) % MaxSize;
//队尾指针加1取模
}
bool OutEqueue(SqQueue Q){
if (Q.rear == Q.front)
return false;
//队空
int x;
x = Q.data[Q.front];
Q.front = (Q.front + 1) % MaxSize;;//对头指针加1取模
}
队列:分配一块连续的存储单元存放队列中的元素,并附设两个指针,分别指示队头元素,和队尾元素的存储位置,分别称为队头指针和队尾指针。
判断是否为空的条件:Q.front==Q.rear==0;
但是不能用Q.rear==maxSize来作为判断队列为空的条件。
有可能出现假溢出,
栈的应用:括号匹配,进制转换,迷宫求解
递归中的栈:
程序每一个递归调用自己的时候,都要创建一个工作记录,工作记录中是:递归调用的返回地址,使用的局部变量,传入的实际参数的副本等。
这些工作记录被保存成栈的形式,每次递归调用的时候,为该层创建的工作记录放在栈顶,使得存放的信息当前可用;
每当退出本层递归调用的时候,相应的工作记录从栈顶删除,上一层递归调用的工作单位为栈顶,从而使得与上一层有关的工作记录恢复可用。
计算机系统中的队列:
(1)解决主机与外部设备速度不匹配的问题
比如:主机和打印机之间速递不匹配的。打印数据缓冲区中所存在的数据就是一个队列。。
(2)CPU的资源竞争。
当有多个用户请求CPU 资源时,
*/
#include<iostream>
typedef int ElemType;
#define MaxSize 50 //定义队列中的最大元素
typedef struct{
ElemType data[MaxSize]; //以数组的形式存放队列中的元素
int front, rear; //指向头指针和
}SqQueue;
SqQueue Q;
void main(){
//初始化队列
Q.rear = Q.front = 0;
}
//判断是否为空
bool IsEmpty(SqQueue Q){
if (Q.rear == Q.front)
return true;
else
return false;
}
//进行入队,先判断尾元素所在位置,元素进入是否是空栈,非空时,然后队尾指针加1
bool InEqueue(SqQueue Q,int x){
if ((Q.rear + 1) % MaxSize == Q.front)
return false;
//队满
Q.data[Q.rear] = x;
Q.rear = (Q.rear + 1) % MaxSize;
//队尾指针加1取模
}
bool OutEqueue(SqQueue Q){
if (Q.rear == Q.front)
return false;
//队空
int x;
x = Q.data[Q.front];
Q.front = (Q.front + 1) % MaxSize;;//对头指针加1取模
}