欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言數(shù)據(jù)結(jié)構(gòu)之判斷循環(huán)鏈表空與滿

 更新時間:2017年10月20日 10:29:36   作者:yzs87  
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之判斷循環(huán)鏈表空與滿的相關資料,希望通過本文能幫助到大家,讓大家掌握這部分內(nèi)容,需要的朋友可以參考下

C語言數(shù)據(jù)結(jié)構(gòu)之判斷循環(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ù)內(nèi)容 
}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)隊列設計,防止內(nèi)存浪費 
} 

//出隊 
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ū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • vs2022?x64?C/C++和匯編混編(案例代碼)

    vs2022?x64?C/C++和匯編混編(案例代碼)

    這篇文章主要介紹了vs2022?x64?C/C++和匯編混編,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • C++使用VLD檢測內(nèi)存泄漏

    C++使用VLD檢測內(nèi)存泄漏

    本文主要介紹了C++使用VLD檢測內(nèi)存泄漏,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • C++中求余運算符(%)示例詳解

    C++中求余運算符(%)示例詳解

    求余運算符“%”,二元運算符,具有左結(jié)合性。參與運算的量均為整型。求余運算的結(jié)果等于兩個數(shù)相除后的余數(shù)??此坪芎唵蔚倪\算符,卻也真要掌握用好它也不容易,這篇文章主要介紹了C++中求余運算符(%)的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • C++ 中實現(xiàn)把EXCEL的數(shù)據(jù)導入數(shù)據(jù)庫(ACCESS、MSSQL等)實例代碼

    C++ 中實現(xiàn)把EXCEL的數(shù)據(jù)導入數(shù)據(jù)庫(ACCESS、MSSQL等)實例代碼

    這篇文章主要介紹了C++ 中實現(xiàn)把EXCEL的數(shù)據(jù)導入數(shù)據(jù)庫(ACCESS、MSSQL等)實例代碼的相關資料,需要的朋友可以參考下
    2017-04-04
  • C語言中extern詳細用法解析

    C語言中extern詳細用法解析

    這篇文章主要介紹了C語言中extern詳細用法解析,本文講解的extern也是C語言中的關鍵詞,用來修飾函數(shù)聲明或變量等,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++中AVL樹的底層以及實現(xiàn)方法總結(jié)

    C++中AVL樹的底層以及實現(xiàn)方法總結(jié)

    這篇文章主要介紹了C++中AVL樹的底層以及實現(xiàn)方法的相關資料,AVL樹是一種自平衡的二叉搜索樹,每個節(jié)點的左右子樹高度差不超過1,通過旋轉(zhuǎn)操作保持平衡,詳解了AVL樹的結(jié)構(gòu)、插入、旋轉(zhuǎn)、查找和遍歷方法,展示了其保持平衡的機制及對應代碼實現(xiàn),需要的朋友可以參考下
    2024-10-10
  • C++11系列學習之列表初始化

    C++11系列學習之列表初始化

    這篇文章主要介紹了C++11系列學習之列表初始化,標準初始化方式太過繁雜,限制偏多,因此在新標準中統(tǒng)一了初始化方,為了讓初始化具有確定的效果,于是提出了列表初始化概念,下文我們就一起來學習該詳細內(nèi)容介紹吧
    2022-04-04
  • C++ DFS算法實現(xiàn)走迷宮自動尋路

    C++ DFS算法實現(xiàn)走迷宮自動尋路

    這篇文章主要為大家詳細介紹了C++ DFS算法實現(xiàn)走迷宮自動尋路,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C++學習進階之Makefile基礎用法詳解

    C++學習進階之Makefile基礎用法詳解

    Makefile 通常指的是一個含有一系列命令(directive)的,通過 Make自動化編譯工具,幫助 C/C++ 程序?qū)崿F(xiàn)自動編譯目標文件的文件,這篇文章主要給大家介紹了關于C++學習進階之Makefile基礎用法的相關資料,需要的朋友可以參考下
    2021-07-07
  • C語言中isalnum()函數(shù)和isalpha()函數(shù)的對比使用

    C語言中isalnum()函數(shù)和isalpha()函數(shù)的對比使用

    這篇文章主要介紹了C語言中isalnum()函數(shù)和isalpha()函數(shù)的對比使用,都可以判斷是否為字母但isalnum的判斷還包括數(shù)字,需要的朋友可以參考下
    2015-08-08

最新評論