專案原因,需要寫乙個佇列來儲存串列埠實時輸出的字串。看了網上很多博文和一些資料結構的資料,給的例子都是實現對單個數字或者字元的佇列操作,並沒有實現在佇列中儲存字串。這裡分享一種可以實現的方法。
關於佇列的一些基本的概念這裡就不在介紹,下面直接上**。
主要實現了:
將字串存入佇列之中,**中的maxsize 是最大的佇列長度。實際中由於夠成了迴圈佇列,所以這個最大儲存長度只有(maxsize-1)。後面的二維陣列 ais_data[maxsize][250] 中250是佇列中的一次儲存字串的最大的長度。
總體來說:在可以確定佇列的長度的最大值的情況下,推薦使用迴圈佇列。如果無法預知佇列的長度,可以使用鍊錶佇列。
#include#include#include#include#include #define maxsize 20
/*迴圈佇列對的順序儲存結構*/
typedef struct
sqqueue;
/*初始化乙個空佇列*/
int initqueue(sqqueue *q)
/* 將佇列清空 */
int clearqueue(sqqueue *q)
/*返回佇列當前長度*/
int queuelength(const sqqueue *q)
/*迴圈隊列入隊操作 e為插入的元素*/
int enqueue(sqqueue *q,char* e)
strcpy(q->ais_data[q->rear],e); //將元素e賦值給隊尾
q->rear=(q->rear+1)%maxsize; //如果指向最後一位則轉回到陣列頭
return 1;
}/*若佇列不為空,則刪除q中隊頭元素,用e值返回*/
int dequeue(sqqueue *q,char *e)
strcpy(e, q->ais_data[q->front]);
q->front=(q->front+1)%maxsize;
return 1;
}
測試執行主函式
void main(void)
a = queuelength(&q);
printf("佇列長度為%d\n",a);
for(i=0;i<15;i++)
a = queuelength(&q);
printf("佇列長度為%d\n",a);
}
好奇怪,我格式明明是正確的。顯示就亂了,額將就看下吧。 C 實現迴圈順序佇列(佇列)
佇列同棧相對,前者為先進先出 first in first in 順序隊裡中,使用陣列儲存資料,基本原理同順序線性表和順序棧。由於使用陣列,所以必須事先定義陣列的最大容量maxsize,使用front表示隊頭位置 最先入元素 使用rear表示隊尾元素 最後入元素 這樣每進入乙個元素,rear要自加一...
mysql迴圈佇列 C語言實現 迴圈佇列
include include include typedef struct queue int pbase 陣列 int front 頭 int rear 尾 rear不存放資料,所以rear前面的是最後乙個資料 queue void init queue queue pq bool full q...
佇列的順序儲存結構(迴圈佇列)(C語言實現)
1 include 2 include 3 4 define ok 1 5 define err 2 6 define true 1 7 define false 0 8 define maxsize 4 定義佇列的最大長度 910 typedef int status 定義函式返回的狀態,ok e...