日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

struct lnode是什么结构类型_【自考】数据结构第三章,队列,期末不挂科指南,第4篇

發布時間:2025/3/15 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 struct lnode是什么结构类型_【自考】数据结构第三章,队列,期末不挂科指南,第4篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

隊列

這篇博客主要介紹一下隊列的概念,并且采用C語言,編寫兩種存儲實現方式:順序存儲和鏈式存儲,當然還有常規的隊列基本操作的實現算法

隊列基本概念

標準解釋:隊列(Queue)是有限個*同類型*數據元素的線性序列,是一種先進先出(First In First Out FIFO)的線性表,新鍵入的數據元素插在隊列尾端,出隊列的數據元素在隊列首部被刪除。

教材中給了一個示意圖,不錯

順序隊列結構類型中有三個域:data、front、rear。

data:一維數組,存儲隊列中的數據元素 font:指向隊列首元素的前一個單元 rear:指向實際的隊列尾元素單元

參考示意圖

入隊列操作可以用兩條賦值語句

SQ.rear = SQ.rear+1; SQ.data[SQ.rear] = x;

出隊列操作可以用一條語句完成

SQ.front = SQ.front+1

但是,會出現一些問題,通過示意圖說明一下

當然還有一種情況,一邊入隊列,一邊出隊列 注意下圖,SQ.front下面還有空間

所以為了解決這種假溢出問題,聰明的開發人員,想出來新的解決辦法了,造一個環兒~

循環隊列

下面看一個圖,重點看一下SQ.rear與SQ.front的對應位置

如果上述圖翻譯成C語言代碼,入隊核心邏輯為

SQ.rear = (SQ.rear+1) % maxsize ; SQ.data[SQ.rear] = x;

出隊列的核心邏輯為

SQ.front = (SQ.front+1)%maxsize;

你在學習的時候,肯定對SQ.rear+1和SQ.front+1有疑問

我們舉例來說明一下吧

順序隊列的C語言實現

接下來難度指數上升,開始用C語言編寫代碼吧

一頓操作之后,還是比較簡單的,總之不寫鏈式存儲,順序的還是比較簡單的

#include <stdio.h> #include <stdlib.h>//循環隊列最大數據元素個數 const int maxsize = 8; //循環隊列的結構體 typedef struct cycqueue{int *data;int front,rear; } CycQue;//隊列初始化 void init(CycQue *CQ){CQ->data = (int *)malloc(maxsize*sizeof(int));CQ->front = 0;CQ->rear = 0; }//判斷隊列是否為空 int empty(CycQue *CQ){if(CQ->rear==CQ->front) return 1;else return 0; }//入隊列 int EnQueue(CycQue *CQ,int x){if((CQ->rear+1)%maxsize==CQ->front){printf("隊列滿");return 0;}else{CQ->rear =(CQ->rear+1) % maxsize;CQ->data[CQ->rear] = x;return 1;}}//出隊列 int OutQueue(CycQue *CQ){if(empty(CQ)){printf("隊列為空");return 0;}else{CQ->front = (CQ->front+1) % maxsize;return 1;}}int main() {CycQue CQ;init(&CQ);EnQueue(&CQ,2);EnQueue(&CQ,4);printf("%d",CQ.rear);OutQueue(&CQ);printf("%d",CQ.front);return 0; }

鏈式隊列的C語言實現

鏈式隊列其實有之前的經驗之后,寫起來難度系數也不會太高,接下來我們編寫一個核心的部分代碼

隊列的鏈接實現實際上是用一個帶有頭結點的單鏈表來表示隊列,成為鏈隊列 頭指針指向鏈表的頭結點 單鏈表的頭結點的next域指向隊列首結點 尾指針指向隊列尾結點,即單鏈表的最后一個結點

初始化

#include <stdio.h> #include <stdlib.h> typedef struct LinkQueueNode{int *data;struct LinkQueueNode *next; } LkQueNode;typedef struct LkQueue{LkQueNode *front,*rear; } LkQue;void init(LkQue *LQ){LkQueNode *temp;temp = (LkQueNode *)malloc(sizeof(LkQueNode)); //生成隊列的頭結點LQ->front = temp; //隊列頭指針指向隊列頭結點LQ->rear = temp; //隊列尾指針指向隊列尾結點(LQ->front)->next = NULL;}

核心兩個操作入隊列和出隊列

入隊列代碼如下

//入隊列 void EnQueue(LkQue *LQ,int x){LkQueNode *temp;temp = (LkQueNode *)malloc(sizeof(LkQueNode));temp->data = x;temp-next = NULL;(LQ->rear)->next = temp;LQ->rear = temp; }

出隊列這個事情就交給你自己吧,好好理解一下,就可以寫出來了

自考要點

在考試中,隊列容易出現編碼題目,占比在7~10分,所以還是蠻重要的呢!

看到這里,辛苦啦,BYEBYE

總結

以上是生活随笔為你收集整理的struct lnode是什么结构类型_【自考】数据结构第三章,队列,期末不挂科指南,第4篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。