C語言數(shù)據(jù)結構之判斷循環(huán)鏈表空與滿
C語言數(shù)據(jù)結構之判斷循環(huán)鏈表空與滿
前言:
何時隊列為空?何時為滿?
由于入隊時尾指針向前追趕頭指針,出隊時頭指針向前追趕尾指針,故隊空和隊滿時頭尾指針均相等。因此,我們無法通過front=rear來判斷隊列“空”還是“滿”。
注:先進入的為‘頭',后進入的為‘尾'。
解決此問題的方法至少有三種:
其一是另設一個布爾變量以匹別隊列的空和滿;
其二是少用一個元素的空間,約定入隊前,測試尾指針在循環(huán)意義下加1后是否等于頭指針,若相等則認為隊滿(注意:rear所指的單元始終為空);
其三是使用一個計數(shù)器記錄隊列中元素的總數(shù)(實際上是隊列長度)。
第一種方法沒有實現(xiàn),下面實現(xiàn)第二種和第三種:
一、少用一個元素空間,約定以“隊列頭指針front在隊尾指針rear的下一個位置上”作為隊列“滿”狀態(tài)的標志。即:
隊空時: front=rear
隊滿時: (rear+1)%maxsize=front
front指向隊首元素,rear指向隊尾元素的下一個元素。
///////////////////////////////////////// // // author: kangquan2008@csdn // ///////////////////////////////////////// #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define QUEUE_SIZE 10 #define EN_QUEUE 1 #define DE_QUEUE 2 #define EXIT 3 typedef int Item; typedef struct QUEUE{ Item * item; int front; int tear; }Queue; int init_queue(Queue * queue) { queue->item = malloc(QUEUE_SIZE * sizeof(Item)); if(!queue->item) { printf("%s\n","Alloc failed,not memory enough"); exit(EXIT_FAILURE); } queue->front = queue->tear = 0; return 1; } int en_queue(Queue * queue, Item item) { if((queue->tear+1) % QUEUE_SIZE == queue->front) { printf("%s\n","The queue is full"); return -1; } queue->item[queue->tear] = item; queue->tear = (queue->tear + 1) % QUEUE_SIZE; return 1; } int de_queue(Queue * queue, Item * item) { if(queue->front == queue->tear) { printf("%s\n","The queue is empty"); return -1; } (*item) = queue->item[queue->front]; queue->front = (queue->front + 1) % QUEUE_SIZE; return 1; } int destroy_queue(Queue * queue) { free(queue->item); } int main() { Queue que; init_queue(&que); int elem; bool flag = true; while(flag) { int choice; printf("1 for en_queue,2 for de_queue,3 for exit\r\nplease input:"); scanf("%d",&choice); switch((choice)) { case EN_QUEUE: printf("input a num:"); scanf("%d",&elem); en_queue(&que,elem); break; case DE_QUEUE: if(de_queue(&que,&elem) == 1) printf("front item is:%d\n",elem); break; case EXIT: flag = false; break; default: printf("error input\n"); break; } } destroy_queue(&que); return 0; }
二、 實例代碼:
#include <stdio.h> #include <assert.h> #define QueueSize 100 typedef char datatype; //隊列的數(shù)據(jù)元素 typedef struct { int front; int rear; int count; //計數(shù)器,用來記錄元素個數(shù) datatype data[QueueSize]; //數(shù)據(jù)內容 }cirqueue; //置空隊 void InitQueue(cirqueue *q) { q->front = q->rear = 0; q->count = 0; } //判斷隊滿 int QueueFull(cirqueue *q) { return (q->count == QueueSize); } //判斷隊空 int QueueEmpty(cirqueue *q) { return (q->count == 0); } //入隊 void EnQueue(cirqueue *q, datatype x) { assert(QueueFull(q) == 0); //q滿,終止程序 q->count++; q->data[q->rear] = x; q->rear = (q->rear + 1)%QueueSize; //循環(huán)隊列設計,防止內存浪費 } //出隊 datatype DeQueue(cirqueue *q) { datatype temp; assert(QueueEmpty(q) == 0);//q空,則終止程序,打印錯誤信息 temp = q->data[q->front]; q->count--; q->front = (q->front + 1)%QueueSize; return temp; }
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
上一篇:C/C++ 獲取Windows系統(tǒng)的位數(shù)32位或64位的實現(xiàn)代碼
欄 目:C語言
本文標題:C語言數(shù)據(jù)結構之判斷循環(huán)鏈表空與滿
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1080.html
您可能感興趣的文章
- 04-02c語言函數(shù)調用后清空內存 c語言調用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對數(shù)怎么表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調用函數(shù)求fibo C語言調用函數(shù)求階乘


閱讀排行
本欄相關
- 04-02c語言函數(shù)調用后清空內存 c語言調用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調用函數(shù)求fibo C語言調用函數(shù)求
隨機閱讀
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10C#中split用法實例總結
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10使用C語言求解撲克牌的順子及n個骰子