队列c语言

编程入门 行业动态 更新时间:2024-10-24 20:14:52

<a href=https://www.elefans.com/category/jswz/34/1771257.html style=队列c语言"/>

队列c语言

**1.循环队列
循环队列的定义

struct Queue{int maxSize;    //  队列最大长度int *data;      //  数据指针int front;      //  头指针索引int rear;       //  尾指针索引
};

a判断队列que是否为空//若空返回 true 并在一行打印 The queue is Empty 末尾换行!!!// 否则返回 false
思路:循环队列头指针和尾指针相等则队列为空

bool isEmpty(Queque* que)
{
if(que->rear==que->front)
{printf("The queue is Empty\n");
return true;}
else return false;
}

b实现入队操作:将元素item加入队列que尾部// 若队列没满,编写加入操作,返回 1// 若队列满了,不做任何操作,返回 -1
思路:注意循环队列入队后尾指针索引为[que->rear+1]%que->maxSize(余数在循环队列应用)

bool isFull(Queque* que)
{
if((que->rear+1)%que->maxSize==que->front)
{
printf(The queue is Full\n");return true;
}
else return false;
}
int enQueque(Queque* que,int item)
{
if(isFull(que)==true)return-1;
else{
que->data[que->rear]=item;
que->rear=(que->rear+1)%que->maxSize;
return 1;}
}

c实现出队操作移除队列que首部元素,并返回元素值
思路:建立节点,与入队是一个相对应的过程

int deQueue(Queue* que)
{
if(isEmpty(que)==true)return -1;
else{int x;
x=que->data[que->front];
que->front=(que->front+1)%que->maxSize;
return x;}
}

2.链队列
链队列动态创建节点,不需要预设大小,内存空间不需要连续,入队、出队更容易实现。但是存取速度慢,操作也比数组的方式更加复杂。
struct Node // 数据节点
{
int data; // 数据类型
Node *next; // 指向下一个节点的指针
};
struct LinkQueue // 链表队列
{
Node *front; // 头指针
Node *rear; // 尾指针
};
实现入队操作:将元素item加入队列que尾部
思路:建立节点–新节点赋值给指向尾指针下一节点–尾指针指向新节点

bool isEmpty(LinkQueue* que)
{
if(que->front==que->rear){printf("The queue is Empty\n");return true;}                                                           else return false;
}
void enQueue(LinkQueue* que,int item)
{
Node* node=(Node*)malloc(sizeof(Node));
node->data=item;
node->next=NULL;
que->rear->next=node;
que->rear=node;
}

实现出队操作:移除队列que首部元素,并返回元素值
//注意:出队是首元素

int deQueue(LinkQueue* que)
{
Node* node=(Node*)malloc(sizeof(Node));
node=que->front->next;
que->front=que->front->next;
return node->data;
}

3.单链表循环队列**
struct Node // 数据节点
{
int data; // 数据类型
Node *next; // 指向下一个节点的指针
};
struct CycleQueue // 循环链表队列
{
int size_; // 目前队列元素个数
Node *rear; // 尾指针
};
实现入队操作:将元素item加入队列que尾部
实现出队操作:移除队列que首部元素,并返回元素值
//思路:建立节点–插入(三步:节点指针域,尾节点指针域,尾节点)–尾指针指向新节点
建立节点–尾指针指向下一节点,头指针即que->rear->next
node=que->rear->next;
que->rear->next=node->next;

bool isEmpty(Cycleque* que)
{
if(que->size_==0){printf("The queue is Empty\n");return 1;}else return 0;}
void enQueue(CycleQueue* que, int item)
{
Node* node;node=(Node*)malloc(sizeof(Node));node->data=item;if(que->size_==0){que->rear=node;que->rear->next=node;}else{
node->next=que->rear->next;
que->rear->next=node;
que->rear=node;}
que->size_+=1;}
int deQueue(CycleQueue* que)
{
if(isEmpty(que))return 0;else{Node* node;node=(Node*)malloc(sizeof(Node));int a;node=que->rear->next;a=node->data;que->rear->next=node->next;que->size_-=1;return a;}}

更多推荐

队列c语言

本文发布于:2024-02-27 12:49:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1706588.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:队列   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!