c语言队列(顺序队列,循环队列,链式队列)
生活随笔
收集整理的這篇文章主要介紹了
c语言队列(顺序队列,循环队列,链式队列)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
順序隊列
1.初始化:
front=-1; rear=-1;2.判空條件
font=rear;3.隊列已滿條件
rear=max-1;代碼:
#include<stdio.h> #include<stdlib.h> #define maxn 6typedef struct node {int date[maxn];int font;int rear; }SeqQueue;void Init(SeqQueue* SQ)//初始化隊列 {SQ->font = -1;SQ->rear = -1; }void EnSeqQueue(SeqQueue* SQ, int value)//入隊 {if (SQ->rear == maxn - 1){printf_s("隊列已滿");exit(0);}else{SQ->date[++SQ->rear] = value;printf_s("入列成功\n");} }int DeSeqQueue(SeqQueue* SQ) {if (SQ->font == SQ->rear){printf_s("隊列為空");return 0;}else{int value;value = SQ->date[++SQ->font];return value;} }循環隊列
1.初始化:
front=0; rear=0;2.判空條件
font=rear;3.隊列已滿條件
少用一個元素空間,指定隊頭指針所在的位置不用來存放元素。這樣當隊尾的指針繞一圈追上頭指針時隊列已滿。
代碼:
#include<stdio.h> #include<stdlib.h> #define m 5 #define maxn m+1typedef struct node {int date[maxn];int font;int rear; }SeqQueue;void Init(SeqQueue* SQ)//初始化隊列 {SQ->font =0;SQ->rear =0; }void EnSeqQueue(SeqQueue* SQ, int value)//入隊 {if ((SQ->rear+1)%maxn==SQ->font){printf_s("隊列已滿");exit(0);}else{SQ->rear = (SQ->rear + 1) % maxn;//循環SQ->date[SQ->rear] = value;printf_s("入列成功\n");} }int DeSeqQueue(SeqQueue* SQ) {if (SQ->font == SQ->rear){printf_s("隊列為空");return 0;}else{SQ->font = (SQ->font + 1) % maxn; //循環int value;value = SQ->date[SQ->font];return value;} }鏈式隊列
為了使隊列結構性更強,將頭指針與尾指針封裝在一個節點中。
1.初始化:讓頭指針與尾指針一同指向一個空節點。
2.判空條件
font=rear;3.無隊列已滿情況
代碼:
#include<stdio.h> #include<stdlib.h>typedef struct node {int date;struct node* next; }LQNode;typedef struct Queue {LQNode* font;LQNode* rear; }LQueue;void Init(LQueue* LQ) {LQNode* node;node = (LQNode*)malloc(sizeof(LQNode));if (node == NULL){printf_s("申請空間失敗\n");exit(0);}else{node->next = NULL;LQ->font = LQ->rear = node;//初始化指向同一個節點} }void En_Link_SeqQueue(LQueue* LQ, int value) {LQNode* node;node = (LQNode*)malloc(sizeof(LQNode));if (node == NULL){printf_s("申請空間失敗\n");exit(0);}else{node->next = NULL;node->date = value;LQ->rear->next=node;LQ->rear = node;} }int De_Link_SeqQueue(LQueue* LQ) {if (LQ->font == LQ->rear){printf_s("隊列為空");return 0;}else{int value;LQNode* node;node = LQ->font->next;//頭指針指向的第一個節點value = node->date;LQ->font->next = node->next; //頭指針后移free(node);//釋放掉沒用用處的空間if (LQ->font->next == NULL) //表明隊列也經為空了LQ->rear = LQ->font;return value;} }總結
以上是生活随笔為你收集整理的c语言队列(顺序队列,循环队列,链式队列)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言数据结构篇之栈(线性栈与链式栈)
- 下一篇: 稀疏矩阵快速转置c语言代码(详解)