數據結構--鏈隊列

課程實驗,多有不足


#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define TRUE       1
#define FALSE      0
#define OK         1
#define ERROR      0
typedef int QueueElementType;

typedef struct Node
{
QueueElementType data;     /*數據域*/
struct Node *next;     /*指針域*/
}LinkQueueNode;
typedef struct
{
LinkQueueNode *front;
LinkQueueNode *rear;
}LinkQueue;
/*初始化操作。*/
int InitQueue(LinkQueue *Q)
{
/* 將Q初始化爲一個空的鏈隊列 */
Q->front=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(Q->front!=NULL)
{
  Q->rear=Q->front;
  Q->front->next=NULL;
   return(TRUE);
}
else return(FALSE);    /* 溢出!*/
}
/*入隊操作。*/
int EnterQueue(LinkQueue *Q,QueueElementType x)
{
/* 將數據元素x插入到隊列Q中 */
LinkQueueNode *NewNode;
NewNode=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(NewNode!=NULL)
{
  NewNode->data=x;
  NewNode->next=NULL;
  Q->rear->next=NewNode;
  Q->rear=NewNode;
  return(TRUE);
}
else return(FALSE);
//請完成本函數的功能
}
/*出隊操作。*/
int DeleteQueue(LinkQueue *Q,QueueElementType *x)
{
/* 將隊列Q的隊頭元素出隊,並存放到x所指的存儲空間中 */
LinkQueueNode *p;
if(Q->front==Q->rear)
  return(FALSE);
p=Q->front->next;
Q->front->next=p->next;
if(Q->rear==p)
  Q->rear=Q->front;
*x=p->data;
free(p);
return(TRUE);
//請完成本函數的功能
}
int GetHead(LinkQueue *Q, QueueElementType *x)
{
/*提取隊列的隊頭元素,用x返回其值*/
if(Q->front==NULL)
  return(FALSE);
else
{
  *x=Q->front->data;
  return(TRUE);
}
//請完成本函數的功能*/
}

int DestroyLinkQueue(LinkQueue *Q)
{//銷燬一個隊列
QueueElementType e;
while(Q->front!=Q->rear)
  DeleteQueue(Q,&e);
free(Q->front);
Q->front=Q->rear=NULL;
return OK;
}
int LinkQueueLength(LinkQueue *Q)
{//隊列的長度
int i=0;
LinkQueueNode * p=Q->front;
while(p!=Q->rear){
  ++i;
  p=p->next;
}
return i;
}
int DisplayLinkQueue(LinkQueue *Q)
{//顯示隊列中所有元素
LinkQueueNode * p;
int i=0;
p=Q->front->next;
if(p==NULL) printf("隊列爲空!\n");//隊列爲空
else{
  while(p){       //否則顯示隊列中所有元素
   printf("[%d:%d]",++i,p->data);
   p=p->next;
  }
  printf("\n");
}
return OK;
}
void main(){
LinkQueue LQ;
QueueElementType e;
int flag=1,ch,len;
int temp;
printf("本程序實現鏈式結構隊列的操作。\n");
printf("可以進行入隊列、出隊列等操作。\n");
InitQueue(&LQ);       //初始化隊列
while(flag){
  printf("請選擇:\n");
  printf("1.顯示隊列所有元素\n");
  printf("2.入隊列\n");
  printf("3.出隊列\n");
  printf("4.求隊列的長度\n");
  printf("5.退出程序\n");
  scanf("%d",&ch);
  switch(ch){
  case 1:DisplayLinkQueue(&LQ);   //顯示隊列中所有元素
   break;
  case 2:printf("請輸入要人隊的元素(一個整數):");
   scanf("%d",&e);   //輸入要入隊列的字符
   EnterQueue(&LQ,e);//入隊列
   DisplayLinkQueue(&LQ);
   break;
  case 3:temp=DeleteQueue(&LQ,&e);  //出隊列
   if(temp==TRUE){
    printf("出隊一個元素:%d\n",e);
    DisplayLinkQueue(&LQ);
   }
   else printf("隊列爲空!\n");
   break;
  case 4:len=LinkQueueLength(&LQ);
   printf("隊列的長度爲:%d\n",len);
   break;
  default:flag=0;
   printf("程序運行結束,按任意鍵退出!\n");
   getcher();
  }
}
DestroyLinkQueue(&LQ);
}

發佈了58 篇原創文章 · 獲贊 22 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章