亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言如何實現鏈隊列

發布時間:2021-09-24 10:45:30 來源:億速云 閱讀:133 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關C語言如何實現鏈隊列,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

隊列的鏈式存儲結構實現,相比于循環隊列實現要復雜一些,但是沒有隊滿的限制。

頭文件聲明

#include <stdio.h>
#include <stdlib.h>

/**
 * 隊列的鏈式存儲實現
 * [帶頭結點的單鏈表]
 * [-類似于鏈棧,隊列的鏈式存儲實現也不會出現隊滿的情況]
 */
//數據類型
typedef int ElemType;

//定義節點
typedef struct SqQueueNode
{
 ElemType data;//數據域
 struct SqQueueNode* next; //指針域
}SqQueueNode;
//定義隊列
typedef struct SqQueueLink{
 SqQueueNode* front;//隊頭指針
 SqQueueNode* rear;//隊尾指針
}SqQueueLink;

//初始化隊列
void InitQueueLink(SqQueueLink* q);
//判斷隊空
int EmptyQueueLink(SqQueueLink q);
//入隊操作
void EnQueueLink(SqQueueLink *q,ElemType e);
//出隊操作
void DeQueueLink(SqQueueLink q,ElemType *e);
//獲取隊列長度
int LengthQueueLink(SqQueueLink q);
//打印隊列
void printSqQueueLink(SqQueueLink q);
//獲取隊頭元素
void GetHeadLink(SqQueueLink q,ElemType* e);

函數實現

#include "SqQueueLink.h"


//初始化隊列
void InitQueueLink(SqQueueLink* q){
 //創建頭結點
 SqQueueNode* pNode=(SqQueueNode*)malloc(sizeof(SqQueueNode));
 pNode->next=NULL;//指針域置空[數據域不存儲任何內容]
 //初始化隊列-[使隊頭指針和隊尾指針指向頭結點]
 q->front=pNode;
 q->rear=pNode;
}

//判斷隊空
int EmptyQueueLink(SqQueueLink q){
 return q.front==q.rear;
}

//入隊操作
void EnQueueLink(SqQueueLink *q,ElemType e){
 //創建新的數據元素節點
 SqQueueNode* newNode=(SqQueueNode*)malloc(sizeof(SqQueueNode));
 newNode->data=e;//指定數據域
 newNode->next=NULL;//指針域置空
 //入隊操作[從隊尾入隊]
 q->rear->next=newNode;
 q->rear=newNode;
}

//出隊操作
void DeQueueLink(SqQueueLink q,ElemType *e){
 //[從隊頭出隊]
 SqQueueNode* p=NULL;
 //是否隊空
 if (q.front==q.rear)
  return;
 p=q.front->next;//獲取首節點
 *e=p->data;
 //使隊頭指針指向下一節點
 q.front->next=p->next;
 //如果原隊列中只有一個節點,要將隊尾指針和隊頭指針均指向同一節點-置空
 if (q.rear==p)
  q.rear=q.front;
 //釋放原首節點
 free(p);
}

//獲取隊列長度
int LengthQueueLink(SqQueueLink q){
 //輔助指針
 SqQueueNode* pNode=q.front->next;
 int count=0;
 //獲取隊列長度
 while (pNode!=q.rear)
 {
  count++;
  pNode=pNode->next;
 }
 return count;
}

//打印隊列
void printSqQueueLink(SqQueueLink q){
 //輔助指針
 SqQueueNode* p=q.front->next;
 while (p!=q.rear)
 {
  printf("%4d",p->data);
  p=p->next;
 }
 printf("\n");
}

//獲取隊頭元素
void GetHeadLink(SqQueueLink q,ElemType* e){
 //判斷隊列是否為空
 if (q.front==q.rear)
  return;
 //獲取隊頭元素的值
 *e=q.front->next->data;
}

函數測試

#include "SqQueueLink.h"

int main(int argc,char** argv){
 //聲明隊列
 SqQueueLink sqLink;
 int i;
 ElemType data;
 //初始化隊列
 InitQueueLink(&sqLink);
 //判斷隊列是否為空
 printf("is Empty?%d\n",EmptyQueueLink(sqLink));
 //入隊操作
 for (i=0;i<=20;i++)
 {
  EnQueueLink(&sqLink,i+1);
 }
 //判斷隊列是否為空
 printf("is Empty?%d,len=%d\n",EmptyQueueLink(sqLink),LengthQueueLink(sqLink));
 //打印隊列
 printSqQueueLink(sqLink);
 //出隊列操作
 DeQueueLink(sqLink,&data);
 //判斷隊列是否為空
 printf("is Empty?%d,len=%d\n",EmptyQueueLink(sqLink),LengthQueueLink(sqLink));
 //打印隊列
 printSqQueueLink(sqLink);
 //獲取隊頭元素的值
 GetHeadLink(sqLink,&data);
 printf("the first node value is %d\n",data);
 return 0;
}

C語言如何實現鏈隊列

關于“C語言如何實現鏈隊列”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永和县| 密山市| 南川市| 乌恰县| 青龙| 玉山县| 无极县| 西充县| 鹤峰县| 财经| 宿松县| 鄯善县| 青田县| 香格里拉县| 禹城市| 简阳市| 司法| 石景山区| 舞钢市| 北流市| 灵寿县| 栾城县| 辰溪县| 甘孜县| 茌平县| 无锡市| 略阳县| 贞丰县| 建瓯市| 乌拉特后旗| 扎鲁特旗| 黄大仙区| 江达县| 临桂县| 镇赉县| 松江区| 贺兰县| 龙口市| 六盘水市| 漠河县| 东辽县|