C語言單鏈隊列的表示與實現執行個體詳解_C 語言

來源:互聯網
上載者:User

1.概述:

C語言的隊列(queue),是指先進先出(FIFO, First-In-First-Out)的線性表。在具體應用中通常用鏈表或者數組來實現。隊列只允許在後端(稱為rear)進行插入操作,在前端(稱為front)進行刪除操作。

單鏈隊列使用鏈表作為基本資料結果,因此不存在偽溢出的問題,隊列長度也沒有限制。但插入和讀取的時間代價會比較高

2.執行個體代碼:

/* 單鏈隊列——隊列的鏈式儲存結構 */typedef struct QNode{ QElemType data; struct QNode *next;}QNode,*QueuePtr;typedef struct{ QueuePtr front,rear; /* 隊頭、隊尾指標 */}LinkQueue;/* 鏈隊列的基本操作(9個) */void InitQueue(LinkQueue *Q){ /* 構造一個空隊列Q */ Q->front=Q->rear=malloc(sizeof(QNode)); if(!Q->front)  exit(OVERFLOW); Q->front->next=NULL;}void DestroyQueue(LinkQueue *Q){ /* 銷毀隊列Q(無論空否均可) */ while(Q->front) {  Q->rear=Q->front->next;  free(Q->front);  Q->front=Q->rear; }}void ClearQueue(LinkQueue *Q){ /* 將Q清為空白隊列 */ QueuePtr p,q; Q->rear=Q->front; p=Q->front->next; Q->front->next=NULL; while(p) {  q=p;  p=p->next;  free(q); }}Status QueueEmpty(LinkQueue Q){ /* 若Q為空白隊列,則返回TRUE,否則返回FALSE */ if(Q.front->next==NULL)  return TRUE; else  return FALSE;}int QueueLength(LinkQueue Q){ /* 求隊列的長度 */ int i=0; QueuePtr p; p=Q.front; while(Q.rear!=p) {  i++;  p=p->next; } return i;}Status GetHead_Q(LinkQueue Q,QElemType *e){ /* 若隊列不空,則用e返回Q的隊頭元素,並返回OK,否則返回ERROR */ QueuePtr p; if(Q.front==Q.rear)  return ERROR; p=Q.front->next; *e=p->data; return OK;}void EnQueue(LinkQueue *Q,QElemType e){ /* 插入元素e為Q的新的隊尾元素 */ QueuePtr p= (QueuePtr)malloc(sizeof(QNode)); if(!p) /* 儲存分配失敗 */  exit(OVERFLOW); p->data=e; p->next=NULL; Q->rear->next=p; Q->rear=p;}Status DeQueue(LinkQueue *Q,QElemType *e){ /* 若隊列不空,刪除Q的隊頭元素,用e返回其值,並返回OK,否則返回ERROR */ QueuePtr p; if(Q->front==Q->rear)  return ERROR; p=Q->front; /* 指向頭結點 */ *e=p->data; Q->front=p->next; /* 摘下前端節點 */ if(Q->rear==p)  Q->rear=Q->front; free(p); return OK;}void QueueTraverse(LinkQueue Q,void(*vi)(QElemType)){ /* 從隊頭到隊尾依次對隊列Q中每個元素調用函數vi() */ QueuePtr p; p=Q.front->next; while(p) {  vi(p->data);  p=p->next; } printf("\n");}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.