赞
踩
{1,2,3,4}
用顺序队列存储的实现操作如下: - #include <stdio.h>
- int enQueue(int *a,int rear,int data){
- a[rear]=data;
- rear++;
- return rear;
- }
-
- void deQueue(int *a,int front,int rear){
- // 如果 front==rear,表示队列为空
- while (front!=rear) {
- printf("出队元素:%d\n",a[front]);
- front++;
- }
- }
- int main() {
- int a[100];
- int front,rear;
- // 设置队头指针和队尾指针,当队列中没有元素时,队头和队尾指向同一块地址
- front=rear=0;
- // 入队
- rear=enQueue(a, rear, 1);
- rear=enQueue(a, rear, 2);
- rear=enQueue(a, rear, 3);
- rear=enQueue(a, rear, 4);
- // 出队
- deQueue(a, front, rear);
- return 0;
- }
-
- /*
- 出队元素:1
- 出队元素:2
- 出队元素:3
- 出队元素:4
- */

a[4]
而不再是a[0]
。即:整个顺序队列在数据不断进队出队过程中,在顺序表中的位置不断后移。- #include <stdio.h>
-
- // 表示顺序表申请的空间大小
- #define max 5
-
- int enQueue(int *a,int front,int rear,int data){
- // 添加判断语句,如果 rear 超过 max,则直接将其从 a[0] 重新开始存储,如果
- // rear+1 和 front 重合,则表示数组已满
- if ((rear+1)%max==front) {
- printf("空间已满");
- return rear;
- }
- a[rear%max]=data;
- rear++;
- return rear;
- }
-
- int deQueue(int *a,int front,int rear){
- // 如果 front==rear,表示队列为空
- if(front==rear%max) {
- printf("队列为空");
- return front;
- }
- printf("%d ",a[front]);
- // front 不再直接 +1,而是 +1 后同 max 进行比较,如果 =max,则直接跳转到 a[0]
- front=(front+1)%max;
- return front;
- }
-
- int main() {
- int a[max];
- int front,rear;
- // 设置队头指针和队尾指针,当队列中没有元素时,队头和队尾指向同一块地址
- front=rear=0;
- // 入队
- rear=enQueue(a,front,rear, 1);
- rear=enQueue(a,front,rear, 2);
- rear=enQueue(a,front,rear, 3);
- rear=enQueue(a,front,rear, 4);
- // 出队
- front=deQueue(a, front, rear);
- // 再入队
- rear=enQueue(a,front,rear, 5);
- // 再出队
- front=deQueue(a, front, rear);
- // 再入队
- rear=enQueue(a,front,rear, 6);
- // 再出队
- front=deQueue(a, front, rear);
- front=deQueue(a, front, rear);
- front=deQueue(a, front, rear);
- front=deQueue(a, front, rear);
- return 0;
- }
-
- /*
- 1 2 3 4 5 6
- */

- // 链表中的节点结构
- typedef struct QNode{
- int data;
- struct QNode * next;
- }QNode;
-
- // 创建链式队列的函数
- QNode * initQueue(){
- // 创建一个头节点
- QNode * queue=(QNode*)malloc(sizeof(QNode));
- // 对头节点进行初始化
- queue->next=NULL;
- return queue;
- }
rear->next=elem
rear=elem
{1,2,3}
依次入队,各个数据元素入队的过程如下: - QNode* enQueue(QNode * rear,int data){
- // 1、用节点包裹入队元素
- QNode * enElem=(QNode*)malloc(sizeof(QNode));
- enElem->data=data;
- enElem->next=NULL;
- // 2、新节点与 rear 节点建立逻辑关系
- rear->next=enElem;
- // 3、rear 指向新节点
- rear=enElem;
- // 返回新的 rear,为后续新元素入队做准备
- return rear;
- }
- void DeQueue(QNode * top,QNode * rear){
- if (top->next==NULL) {
- printf("队列为空");
- return ;
- }
- // 1、
- QNode * p=top->next;
- printf("%d",p->data);
- top->next=p->next;
- if (rear==p) {
- rear=top;
- }
- free(p);
- }
- #include <stdio.h>
- #include <stdlib.h>
-
- typedef struct QNode{
- int data;
- struct QNode * next;
- }QNode;
- QNode * initQueue(){
- QNode * queue=(QNode*)malloc(sizeof(QNode));
- queue->next=NULL;
- return queue;
- }
-
- QNode* enQueue(QNode * rear,int data){
- QNode * enElem=(QNode*)malloc(sizeof(QNode));
- enElem->data=data;
- enElem->next=NULL;
- // 使用尾插法向链队列中添加数据元素
- rear->next=enElem;
- rear=enElem;
- return rear;
- }
-
- QNode* DeQueue(QNode * top,QNode * rear){
- if (top->next==NULL) {
- printf("\n队列为空");
- return rear;
- }
- QNode * p=top->next;
- printf("%d ",p->data);
- top->next=p->next;
- if (rear==p) {
- rear=top;
- }
- free(p);
- return rear;
- }
-
- int main() {
- QNode * queue,*top,*rear;
- // 创建头结点
- queue=top=rear=initQueue();
- // 向链队列中添加结点,使用尾插法添加的同时,队尾指针需要指向链表的最后一个元素
- rear=enQueue(rear, 1);
- rear=enQueue(rear, 2);
- rear=enQueue(rear, 3);
- rear=enQueue(rear, 4);
- // 入队完成,所有数据元素开始出队列
- rear=DeQueue(top, rear);
- rear=DeQueue(top, rear);
- rear=DeQueue(top, rear);
- rear=DeQueue(top, rear);
- rear=DeQueue(top, rear);
- return 0;
- }
-
- /*
- 1 2 3 4
- 队列为空
- */

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。