十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本站主要介绍循坏队列的相关操作!!!
一、SQueue.h 1、头文件队列是一种先进先出的存储结构,即:在队尾入,在队头出!
#include#include#include
2、循环顺序队的结构体typedef struct SeqQueue {ElemType data[Max];
int front;//队头指针
int rear;//队尾指针
}SQueue;
3、函数声明void InitSQueue(SQueue* Q);//初始化顺序队
bool EnSQueue(SQueue* Q, ElemType x);//入队
bool DeSQueue(SQueue* Q);//出队
bool GetSQHead(SQueue Q, ElemType* x);//获取队头元素
void SQLength(SQueue Q);//计算队列元素个数
void PrintSQueue(SQueue Q);//显示队列中的信息
bool SQIsFull(SQueue Q);//判断队满
bool SQIsEmpty(SQueue Q);//判断队空
4、其他#define Max 10//定义队列中元素的大个数
typedef int ElemType;
二、Main_squeue.c
主函数void test() {SQueue L;
InitSQueue(&L);
int i = 0;
for (i = 1; i<= 5; i++)
EnSQueue(&L, i);
PrintSQueue(L);
DeSQueue(&L);
DeSQueue(&L);
PrintSQueue(L);
ElemType x;
GetSQHead(L, &x);
printf("队头元素为:%d\n", x);
SQLength(L);
}
int main() {test();
return 0;
}
三、Fun_squeue.c1、初始化循环队列循环顺序队的主要功能包括:入队、出队、获取队头元素、计算队列元素个数、显示队列中的信息、判断队满、判断队空!!!
将队头和队尾指针都指向空,表示此时队列为空状态!
void InitSQueue(SQueue* Q) {Q->front = Q->rear = NULL;
}
2、入队队尾入队!
bool EnSQueue(SQueue* Q, ElemType x) {assert(Q);
if (SQIsFull(*Q))//判断队满否
return false;
Q->data[Q->rear] = x;
Q->rear = (Q->rear + 1) % Max;//队尾指针加1取模
return true;
}
3、出队队头出队!
bool DeSQueue(SQueue* Q) {assert(Q);
if (SQIsEmpty(*Q))
return false;
printf("出队元素为:%d\n", Q->data[Q->front]);//打印出队元素
Q->front = (Q->front + 1) % Max;//队头指针加1取模
return true;
}
4、获取队头元素bool GetSQHead(SQueue Q, ElemType* x) {if (SQIsEmpty(Q))
return false;
*x = Q.data[Q.front];//记录队头元素
return true;
}
5、计算队列元素个数void SQLength(SQueue Q) {int len = 0;
len = (Q.rear - Q.front + Max) % Max;
printf("队列中的元素个数为:%d\n", len);
}
6、显示队列中的信息void PrintSQueue(SQueue Q) {if (SQIsEmpty(Q)) {printf("队列为空!\n");
return;
}
//法一:
while (Q.rear != Q.front) {printf("%d ", Q.data[Q.front]);
Q.front = (Q.front + 1) % Max;
}
//法二:
//int i = 0;
//for (i = Q.front; i != Q.rear; i = (i + 1) % Max)
// printf("%d ", Q.data[i]);
printf("\n");
}
7、判断队满此次循环队列,采用空一个位置来区别队空队满的!
bool SQIsFull(SQueue Q) {//此处我们采用的是空出一个存储单元来区分队空队满
return (Q.rear + 1) % Max == Q.front;
}
8、判断队空bool SQIsEmpty(SQueue Q) {return Q.rear == Q.front;
}
区分队空与队满的方法:
a、牺牲一个存储单元来区分;
b、增设一个数据成员来区分,例如:队空条件Q.size == 0,队满条件
Q.size == Max ;
c、增设tag标记数据成员,当tag等于0时,若因删除导致Q.rear == Q.front,则为队空,当tag等于1时,若因插入导致 Q.rear == Q.front ,则为队满。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧