c——队列

Posted cxc1357

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c——队列相关的知识,希望对你有一定的参考价值。

循环队列

一、顺序存储

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 typedef int ElementType;
 4 typedef int Position;
 5 typedef struct QNode * PtrToQNode;
 6 struct QNode{
 7     ElementType * Data;
 8     Position Front,Rear;
 9     int MaxSize;
10 };
11 typedef PtrToQNode Queue;
12 //创建队列 
13 Queue CreateQueue(int MaxSize){
14     Queue Q = (Queue)malloc(sizeof(struct QNode));
15     Q->Data = (ElementType*)malloc(MaxSize*sizeof(ElementType));
16     Q->Front=Q->Rear=0;
17     Q->MaxSize=MaxSize;
18     return Q;
19 } 
20 bool IsFull(Queue Q){
21     return((Q->Rear+1)%Q->MaxSize==Q->Front);
22 }
23 //插入元素 
24 bool AddQ(Queue Q,ElementType X){
25     if(IsFull(Q)){
26         printf("队列满");
27         return false;
28     }else{
29         Q->Rear=(Q->Rear+1)%Q->MaxSize;
30         Q->Data[Q->Rear]=X;
31         return true;
32     }
33 }
34 bool IsEmpty(Queue Q){
35     return(Q->Front==Q->Rear);
36 }
37 //删除元素 
38 ElementType DeleteQ(Queue Q){
39     if(IsEmpty(Q)){
40         printf("队列空");
41         return -1;
42     }else{
43         Q->Front=(Q->Front+1)%Q->MaxSize;
44         return Q->Data[Q->Front];
45     }
46 }
47 int main(){
48     Queue que;
49     que=CreateQueue(5);
50     AddQ(que,10);
51     AddQ(que,20);
52     AddQ(que,30);
53     printf("%d",DeleteQ(que));
54     printf("%d",DeleteQ(que));
55     printf("%d",DeleteQ(que));
56 }

分析:

1、定义结构:数据Data[];头尾结点Front、Rear;容量MaxSize

2、创建:为队列结构和数据申请空间,数据通过结构中的指针访问;头尾指针归零

3、插入删除:判断空满;尾入头出

4、注意是循环队列,空满判断条件要取余

以上是关于c——队列的主要内容,如果未能解决你的问题,请参考以下文章

来自dispatch_async全局崩溃的C函数调用,但在主队列上工作

C 中的共享内存代码片段

[linux][c/c++]代码片段01

C语言代码片段

c_cpp Atlas300代码片段

c_cpp Robolution基本代码片段