1. 程式人生 > >帶頭結點的迴圈連結串列表示佇列, 並且只設一個指標指向隊尾元素結點, 試編寫相應的佇列初始化,入佇列和出佇列的演算法

帶頭結點的迴圈連結串列表示佇列, 並且只設一個指標指向隊尾元素結點, 試編寫相應的佇列初始化,入佇列和出佇列的演算法

資料結構演算法題(假設以帶頭結點的迴圈連結串列表示佇列,
並且只設一個指標指向隊尾元素結點(注意不設頭指標)
試編寫相應的佇列初始化,入佇列和出佇列的演算法!)

/*  資料結構演算法題(假設以帶頭結點的迴圈連結串列表示佇列,
 *  並且只設一個指標指向隊尾元素結點(注意不設頭指標)
 *  試編寫相應的佇列初始化,入佇列和出佇列的演算法!) 
 */

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define OK 1
#define ERROR 0

typedef int QElemType;
typedef int
Status; typedef struct QNode { QElemType data; struct QNode * rear; struct QNode * next; }QNode,*LinkQueue; //鏈式佇列的初始化 Status InitLinkQueue(LinkQueue * L) { (*L)=(LinkQueue)malloc(sizeof(QNode)); if((*L)==NULL) { printf("記憶體分配失敗!\n"); return OK; } (*L
)->rear=(*L); return OK; } //鏈式佇列的建立 Status Create(LinkQueue * L,int n) { srand(time(0)); LinkQueue P; for(int i=0;i<n;i++) { P=(LinkQueue)malloc(sizeof(QNode)); P->data=rand()%100+1; (*L)->rear->next=P; (*L)->rear=P; } P->next
=(*L); return OK; } //入隊操作 Status EnQueue(LinkQueue * L,QElemType e) { LinkQueue P; P=(LinkQueue)malloc(sizeof(QNode)); P->data=e; P->next=(*L); (*L)->rear->next=P; (*L)->rear=P; return OK; } //出隊操作 Status DeQueue(LinkQueue * L,QElemType * e) { LinkQueue temp; *e=(*L)->next->data; temp=(*L)->next; (*L)->next=(*L)->next->next; delete(temp); return OK; } //輸出 void Print(LinkQueue * L) { LinkQueue P; P=(*L)->next; printf("輸出元素:\n"); while(P!=(*L)) { printf("%d ",P->data); P=P->next; } printf("\n"); } int main() { LinkQueue L; int ElemNumber; QElemType EnElem,DeElem; InitLinkQueue(&L); printf("請輸入元素個數:\n"); scanf("%d",&ElemNumber); Create(&L,ElemNumber); Print(&L); printf("請輸入入隊元素:\n"); scanf("%d",&EnElem); EnQueue(&L,EnElem); Print(&L); printf("出隊操作,並返回出隊元素:\n"); DeQueue(&L,&DeElem); printf("出隊元素為:%d\n",DeElem); Print(&L); return 0; }

執行結果