链队列的简单操作(入队,出队,输出队元素等)
来源:互联网 发布:2017淘宝加权重刷法 编辑:程序博客网 时间:2024/04/19 15:08
定义一个节点,里面包含元素类型,指向下一个节点的指针。然后定义一个结构体,里面两个指针,指向队头和队尾
typedef struct QNode { int data; struct QNode * next;}QNode, * Queue;typedef struct { Queue front; Queue rear;}LinkQueue;
入队操作要注意别动指向队头的front指针,如果是q->front->next = p那每次就会插到队头。而队列是队头出,队尾进。也不要忘了新节点p->next = NULL;
void EnQueue(LinkQueue * q, int x){ Queue p = (Queue)malloc(sizeof(QNode)); if (!p) { printf("无内存空间可分配\n"); } p->data = x; p->next = NULL; q->rear->next = p; q->rear = p;}
void DeQueue(LinkQueue * q){ QNode * p; if (IsEmpty(&q)) { printf("空列\n"); } p = q->front->next; q->front->next = p->next; if (q->rear == p) q->rear = q->front; free(p); printf("出队成功\n");}
输出队列元素,首先判断是否为空。不要动队头和队尾指针,否则你移动了了个指针就破坏了队列结构,你将队头指针的地址告诉节点指针,让节点进行遍历,从而进行保护
void print(LinkQueue * q){ QNode * p = q->front->next; if (IsEmpty(&q)) { printf("空队\n"); } while (p) { printf("%d ", p->data); p = p->next; } printf("\n\n");}
具体实现如下
#include<stdio.h>#include<stdlib.h>typedef struct QNode { int data; struct QNode * next;}QNode, * Queue;typedef struct { Queue front; Queue rear;}LinkQueue;void InitialQueue(LinkQueue * q){ q->front = q->rear = (Queue)malloc(sizeof(QNode)); if (!q->front) { printf("无内存空间可分配\n"); } q->front->next = NULL; printf("初始化成功\n");}void EnQueue(LinkQueue * q, int x){ Queue p = (Queue)malloc(sizeof(QNode)); if (!p) { printf("无内存空间可分配\n"); } p->data = x; p->next = NULL; q->rear->next = p; q->rear = p;}int IsEmpty(LinkQueue * q){ return (q->front== q->rear)?1:0;}void DeQueue(LinkQueue * q){ QNode * p; if (IsEmpty(&q)) { printf("空列\n"); } p = q->front->next; q->front->next = p->next; if (q->rear == p) q->rear = q->front; free(p); printf("出队成功\n");}void DesQueue(LinkQueue * q){ while (q->front) { q->rear = q->front->next; free(q->front); q->front = q->rear; } printf("销毁成功\n"); exit(1);}void print(LinkQueue * q){ QNode * p = q->front->next; if (IsEmpty(&q)) { printf("空队\n"); } while (p) { printf("%d ", p->data); p = p->next; } printf("\n\n");}int main(void){ LinkQueue queue; int num, flag; InitialQueue(&queue); while (scanf("%d", &num)) { EnQueue(&queue, num); } getchar(); printf("1.入队 2.出队\n"); printf("3.判断队是否为空 4.输出队列 5.销毁队列 6.退出\n"); while (scanf("%d", &flag) && flag != 6) { switch (flag) { case 1: printf("输入入队元素:");scanf("%d", &num);EnQueue(&queue, num);break; case 2: DeQueue(&queue);break; case 3: printf("%s\n\n", IsEmpty(&queue)==1?"空队":"非空队");break; case 4: print(&queue);break; case 5: DesQueue(&queue);break; default: printf("请输入合法操作!\n\n");break; } printf("1.入队 2.出队\n"); printf("3.判断队是否为空 4.输出队列 5.销毁队列 6.退出\n"); } return 0;}
阅读全文
1 0
- 链队列的简单操作(入队,出队,输出队元素等)
- 链队列的初始化、入队、出队等操作实现
- C++实现普通队列,循环队列的基本操作(初始化,入队,出队,获取队列首元素等)
- 循环队列的初始化、入队、出队等基本操作
- 队列的出队/入队的操作
- 队列的入队、出队操作实现
- 队列的入队和出队操作
- 队列的入队/出队操作
- 队列的入队、出队操作
- 队列的入队、出队基本操作
- 队列的入队出队操作
- 链式队列的入队出队操作
- C语言实现顺序队列的初始化、入队、出队等操作(三)
- 队列操作--出队入队
- 链队列、循环队列的实现(初始化、出队、入队、取队头元素、判空)
- 【C++】容器适配器实现队列Queue的各种功能(入队、出队、判空、大小、访问所有元素等)
- 编程实现顺序队列的入队操作和出队操作,并将出队结果输出
- 链队列的入队、出队
- JavaEE请求对象
- ubuntu 64位下载 处理器为Intel
- 固态硬盘
- 数字特征值
- Unity-2D图形&Sprite
- 链队列的简单操作(入队,出队,输出队元素等)
- 快捷键sublime
- 20171027
- Unity-2D物理
- 高效的事件处理模式和高效的并发模式
- linux安装启动tomcat后浏览器无法访问
- Uber 又一高管宣布离职,深陷技术、人事、社会负面舆论的 Uber 何时能走出泥潭
- 阿里大文娱板块又添一员 大麦网正式加入
- 致敬初代iPhone?传苹果十周年新机将采用“水滴形”设计