多语言展示
当前在线:1628今日阅读:126今日分享:42

C语言数据结构之线性表队循环列(静态数组实现)

队列一种先进先出操作受限的线性表结构。 只能从队尾插入,只能动队首删除。 本经验主要讲解队列的基本操作相关的API函数,如队列的初始化、队列数据入栈、队列数据出栈、队列是否已满、队列是否为空、显示队列数据(遍历队列)、获取队列使用空间、获取队列剩余空间等等。
工具/原料

Visual Studio 2013

方法/步骤
1

【1】打开Visual Studio 2013软件,并且创建Win32控制台应用程序。  【2】添加相应的头文件#include 'stdafx.h'#include 'stdio.h'#include 'malloc.h'#include 'stdbool.h'  【3】验证工程的正确性和完整性#include 'stdafx.h'#include 'stdio.h'#include 'malloc.h'#include 'stdbool.h' void main(void){ printf('Hello Word......\r\n'); while (1);}

2

【1】队列类型定义#define QUEUE_ZISE 6//队列长度 typedef struct Queue{ int qFront;//队首 int qRear;//队尾 int BasicArr[QUEUE_ZISE];//队列数据}Queue, * pQueue;//Queue  等效于 struct Queue //pQueue 等效于 struct Queue *  队首 :指向队列出队的存储空间,只允许从队首出队。队尾 :指向队列最后一个元素的下一个元素存储空间,只允许从队尾入队。  【2】队列的初始化队首和队尾指向相同的储存空间,且都为零。即queue->qFront = 0; queue->qRear  = 0;

3

【1】判断队列是否为空当队首和队尾都指向同一存储空间,队首和队尾值相等时,则表示队列为空。即queue->qFront == queue->qRear  【2】判断队列是否已满当队尾指向下一个存储空间为队首时,则说明队列已满。即((queue->qRear + 1) % QUEUE_ZISE) == queue->qFront

4

【1】数据入队将数据存入队尾指向的存储空间,然后队尾再指向下一个存储空间,即queue->BasicArr[queue->qRear] = vale; queue->qRear = (queue->qRear + 1) % QUEUE_ZISE;  【2】数据出队将队首指向的存储空间数据出队,然后队首在指向下一个存储空间。即out = queue->BasicArr[queue->qFront]; queue->qFront = (queue->qFront + 1) % QUEUE_ZISE;

5

【1】队列初始化函数//初始化队列void InitQueue(pQueue queue){ queue->qFront = 0; queue->qRear  = 0;  printf('队列初始化成功......\r\n'); printf('队列总长度 : %d\r\n', (QUEUE_ZISE - 1)); printf('队首 : %d\r\n', queue->qFront); printf('队尾 : %d\r\n', queue->qRear);} 【2】验证队列初始化void main(void){ Queue queue;  InitQueue(&queue);//初始化队列 printf('\r\n');  while (1);}  【3】判断队列是否为满函数//队列是否为满bool IsFullQueue(pQueue queue){ //队尾下个数据为队首 if (((queue->qRear + 1) % QUEUE_ZISE) == queue->qFront) return true; else return false;}  【4】判断队列是否为空函数//队列是否为空bool IsEmptyQueue(pQueue queue){ if (queue->qFront == queue->qRear)//队首等于队尾 return true; else return false;}

6

【1】数据入队函数//入队void EnterQueue(pQueue queue, int vale){ if (IsFullQueue(queue)) { printf('队列已满,入队失败......\r\n'); return; }  //从队尾入队 queue->BasicArr[queue->qRear] = vale;//入队数据 queue->qRear = (queue->qRear + 1) % QUEUE_ZISE;//队尾移向下个位置  printf('入队成功!入队值为:%d   ---->    ', vale); printf('队首: %d   队尾: %d\r\n', queue->qFront, queue->qRear);}  【2】数据入队的验证void main(void){ Queue queue;  InitQueue(&queue);//初始化队列 printf('\r\n');  EnterQueue(&queue, 26);//入队 EnterQueue(&queue, 27); EnterQueue(&queue, 68); EnterQueue(&queue, 19); EnterQueue(&queue, 73); printf('\r\n');  while (1);}  【3】遍历队列函数//显示队列数据void ShowQueue(pQueue queue){ int cur = 0;  if (IsEmptyQueue(queue)) { printf('队列为空,显示失败......\r\n'); return; }  printf('队列数据: '); cur = queue->qFront; while (cur != queue->qRear) { printf('%d  ', queue->BasicArr[cur]); cur = (cur + 1) % QUEUE_ZISE; } printf('\r\n');}  【4】验证遍历队列void main(void){ Queue queue;  InitQueue(&queue);//初始化队列 printf('\r\n');  EnterQueue(&queue, 26);//入队 EnterQueue(&queue, 27); EnterQueue(&queue, 68); EnterQueue(&queue, 19); EnterQueue(&queue, 99); ShowQueue(&queue);//显示队列数据 printf('\r\n');  while (1);}

7

【1】数据出队函数//出队int OutQueue(pQueue queue){ int out = 0;  if (IsEmptyQueue(queue)) { printf('队列已空,出队失败......\r\n'); return out; }  out = queue->BasicArr[queue->qFront];//出队值 queue->qFront = (queue->qFront + 1) % QUEUE_ZISE;//指向下一个出队值  printf('出队成功!出队值为:%d   ---->    ', out); printf('队首: %d   队尾: %d\r\n', queue->qFront, queue->qRear);  return  out;}  【2】验证数据出队void main(void){ Queue queue;  InitQueue(&queue);//初始化队列 printf('\r\n');  EnterQueue(&queue, 26);//入队 EnterQueue(&queue, 27); EnterQueue(&queue, 68); EnterQueue(&queue, 19); ShowQueue(&queue);//显示队列数据 printf('\r\n');  OutQueue(&queue);//出队 OutQueue(&queue); OutQueue(&queue); ShowQueue(&queue);//显示队列数据 printf('\r\n');  while (1);}

8

【1】获取已使用的队列空间//队列使用空间int CountQueue(pQueue queue){ int cur = 0; int len = 0;  cur = queue->qFront; while (cur != queue->qRear) { len++; cur = (cur + 1) % QUEUE_ZISE; }  printf('队列使用空间 : %d\r\n', len); return len;}  【2】验证获取已使用的队列空间void main(void){ Queue queue;  InitQueue(&queue);//初始化队列 printf('\r\n');  EnterQueue(&queue, 26);//入队 EnterQueue(&queue, 27); EnterQueue(&queue, 68); EnterQueue(&queue, 19); EnterQueue(&queue, 32); EnterQueue(&queue, 57); EnterQueue(&queue, 99); CountQueue(&queue);//队列使用空间 ShowQueue(&queue);//显示队列数据 printf('\r\n');  OutQueue(&queue);//出队 OutQueue(&queue); OutQueue(&queue); CountQueue(&queue);//队列使用空间 ShowQueue(&queue);//显示队列数据 printf('\r\n');  while (1);}  【3】获取队列剩余空间的大小//队列剩余空间int ResidueQueue(pQueue queue){ int len = 0; int cur = 0; int res = 0;  cur = queue->qFront; while (cur != queue->qRear) { len++; cur = (cur + 1) % QUEUE_ZISE; }  res = QUEUE_ZISE - 1 - len; printf('队列剩余空间 : %d\r\n', res); return res;}   【4】验证获取队列剩余空间的大小void main(void){ Queue queue;  InitQueue(&queue);//初始化队列 printf('\r\n');  EnterQueue(&queue, 26);//入队 EnterQueue(&queue, 27); EnterQueue(&queue, 68); EnterQueue(&queue, 19); EnterQueue(&queue, 99); CountQueue(&queue);//队列使用空间 ResidueQueue(&queue);//队列剩余空间 ShowQueue(&queue);//显示队列数据 printf('\r\n');  OutQueue(&queue);//出队 OutQueue(&queue); OutQueue(&queue); CountQueue(&queue);//队列使用空间 ResidueQueue(&queue);//队列剩余空间 ShowQueue(&queue);//显示队列数据 printf('\r\n');  while (1);}

9

【1】关于队列操作的所有API函数#define QUEUE_ZISE 6//队列长度 typedef struct Queue{ int qFront;//队首 int qRear;//队尾 int BasicArr[QUEUE_ZISE];//队列数据}Queue, * pQueue;//Queue  等效于 struct Queue //pQueue 等效于 struct Queue *  //初始化队列void InitQueue(pQueue queue) //队列是否为空bool IsEmptyQueue(pQueue queue) //队列是否为满bool IsFullQueue(pQueue queue) //入队void EnterQueue(pQueue queue, int vale) //出队int OutQueue(pQueue queue) //显示队列数据void ShowQueue(pQueue queue) //队列使用空间int CountQueue(pQueue queue) //队列剩余空间int ResidueQueue(pQueue queue)

注意事项
1

本人原创经验,仅供参考,若有不足之处请留言指正,若觉得写得好或凑合的话,请点击本页面左下角投票,谢谢了\(^o^)/

2

若有任何意见与帮助,请关注后私信留言,非喜勿喷

3

需要相关帮助请投票后关注私信

推荐信息