帶頭結點的迴圈連結串列表示佇列, 並且只設一個指標指向隊尾元素結點, 試編寫相應的佇列初始化,入佇列和出佇列的演算法
阿新 • • 發佈:2018-12-24
資料結構演算法題(假設以帶頭結點的迴圈連結串列表示佇列,
並且只設一個指標指向隊尾元素結點(注意不設頭指標)
試編寫相應的佇列初始化,入佇列和出佇列的演算法!)
/* 資料結構演算法題(假設以帶頭結點的迴圈連結串列表示佇列,
* 並且只設一個指標指向隊尾元素結點(注意不設頭指標)
* 試編寫相應的佇列初始化,入佇列和出佇列的演算法!)
*/
#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;
}