資料結構 分別實現順序佇列和鏈式佇列

2021-08-18 19:42:35 字數 3977 閱讀 6899

順序佇列

seqqueue.h

#pragma once

#include #include #define title printf("\n********************%s********************",__function__);

#define seqqueuemaxsize 1000

typedef char seqqueuetype;

typedef struct seqqueue

seqqueue;

void seqqueueinit(seqqueue* q); //初始化

void seqqueuedestroy(seqqueue *q);//銷毀

void seqqueueprint(seqqueue* q);//列印

void seqqueuepush(seqqueue*q,seqqueuetype value);//入佇列

void seqqueuepop(seqqueue*q);//出佇列

int seqqueueget(seqqueue* q,char* value);//獲取隊首元素

seqqueue.c

#include "seqqueue.h"

void seqqueueinit(seqqueue* q)

q->size = 0;

q->head = 0;

q->tail = 0;

return;

}void seqqueuedestroy(seqqueue* q)

q->size = 0;

q->head = 0;

q->tail = 0;

return;

}//實際上佇列是不允許被列印的,這裡僅為測試**是否正確

void seqqueuprint(seqqueue* q,const char* msg)

if(q->size == 0)

//tail在head後面

if(q->head < q->tail)

printf("\n");

return;

} // tail在head前

else

i = 0;

for(;itail;i++)

printf("\n"); }}

void seqqueuepush(seqqueue*q,seqqueuetype value)

if(q->size >= seqqueuemaxsize)

q->data[q->tail] = value;

q->tail++;

q->size++;

if(q->tail >= seqqueuemaxsize) }

void seqqueuepop(seqqueue*q)

if(q->size == 0)

if(q->head >= seqqueuemaxsize)

q->head++;

q->size--;

} int seqqueueget(seqqueue* q,char* value)

if(q->size == 0)

*value = q->data[q->head];

q->head++;

q->size--;}//

// 以下為測試** //

/void testseqqueuepush()

void testseqqueuepop()

void testseqqueueget()

int main()

執行結果:

鏈式佇列

listqueue.h

#include #include #define title printf("\n********************==%s********************\n",__function__);

typedef char listqueuetype;

typedef struct listqueue

listqueue;

void listqueueinit(listqueue** head);//初始化

void listqueuedestroy(listqueue** head);//銷毀佇列

void listqueuepush(listqueue** head,listqueuetype value);//入佇列

listqueue* listqueuecreate(listqueuetype value);//建立結點

void listqueueprint(listqueue* head,const char *msg);//列印佇列

void listqueuepop(listqueue** head);//出佇列

int listqueueget(listqueue** head,char* value);//取佇列首元素,成功返回1,否則返回0

listqueue.c

#include"listqueue.h"

void listqueueinit(listqueue** head)

*head = null;

return;

}void listqueuedestroy(listqueue** head)

if(*head == null)

listqueue* cur = *head;

listqueue* to_delete = null;

while(cur != null)

return;

}listqueue* listqueuecreate(listqueuetype value)

void listqueueprint(listqueue* head,const char *msg)

listqueue* cur = head;

while(cur != null)

printf("\n");

}void listqueuepush(listqueue**head,listqueuetype value)

if(*head == null)

listqueue* cur = *head;

while(cur->next != null)

cur->next = listqueuecreate(value);

return;

}void listqueuepop(listqueue** head)

if(*head == null)

if((*head)->next == null)

listqueue* to_delete = *head;

*head = (*head)->next;

free(to_delete);

return;

}int listqueueget(listqueue** head,char* value)

if(*head == null)

*value = (*head)->data;

return 1;}/

// 以下為測試函式 //

/void testlistqueuepush()

void testlistqueuedestroy()

void testlistqueuepop()

void testlistqueueget()

int main()

執行結果:

資料結構 佇列實現(順序迴圈佇列 鏈式佇列)

佇列的介面 public inte ce qqueue 存在假溢位問題!不建議使用 使用模擬迴圈的方式避免假溢位 實現 package pers.zhang.queue author zhang date 2020 1 17 11 45 順序迴圈佇列 public class seqqueue im...

資料結構 Java實現佇列的順序儲存和鏈式儲存

佇列的性質 先進先出。佇列的順序儲存 環形隊 採用乙個陣列和乙個代表陣列的下標的整型變數實現。環形隊 順序隊會造成陣列空間的浪費 如果不想造成空間的浪費 可以使用乙個陣列來實現,不需要頭 尾指標,在進隊時 重新建立乙個陣列儲存原來的元素和進隊的元素,然後將 新陣列賦給舊陣列,該寫法不要對隊的大小做限...

C 資料結構之佇列(順序和鏈式)

11.24 學習筆記 今日打卡佇列 鏈式和順序表 沒有注重格式,只是能夠實現基本的功能。中很多多餘的變數和書寫,都是在除錯過程中產生的,本部落格只是記錄 佇列 鏈式儲存 include include 建立乙個結點的結構體,裡面存有data和next typedef struct qnodenode...