順序佇列
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...