顺序表实现队列
一. 隊(duì)列相關(guān)概念
?????隊(duì)列是只允許在一段進(jìn)行插入元素, 在另一端進(jìn)行刪除元素的線性表,即只允許對隊(duì)列進(jìn)行尾插,頭刪的操作.隊(duì)列具有先進(jìn)先出, 后進(jìn)后出的特性.
????????
????1.初始化
void SeqQueInit(SeqQue* q) {if(q == NULL){return;//非法輸入}q -> head = 0;q -> tail = 0;q -> size = 0; }????????????????
????2. 打印隊(duì)列信息
void TestPrintChar(SeqQue* q, char* msg) {printf("[ %s ]\n", msg);printf("size = %d\n", q -> size);printf("head = %d\n", q -> head);printf("tail = %d\n", q -> tail);if(q == NULL){return;//非法輸入}int i = q -> head;for(; i < q -> tail; i++){printf("[%c]", q -> data[i]);}printf("\n"); }????3. 擴(kuò)容
void SeqQueReSize(SeqQue* q) {if(q == NULL){return;//非法輸入}if(q -> size < SEQQUEMAX){return;//隊(duì)列未滿}int size = 2 * SEQQUEMAX + 1;SeqQueType* new_ptr = (SeqQueType*)malloc(size);int i = 0;for(; i < q -> size; i++){new_ptr[i] = q -> data[i];}free(q -> data); }????4.入隊(duì)列
void SeqQuePush(SeqQue* q, SeqQueType value) {if(q == NULL)//空隊(duì)列{q -> size++;q -> data[q -> head] = value;q -> data[q -> tail] = value;return;}if(q -> size >= SEQQUEMAX){SeqQueReSize(q);return;//滿隊(duì)列}q -> data[q -> tail++] = value;if(q -> tail > SEQQUEMAX){q -> tail = 0;}++q -> size; }???????????????
????5. 出隊(duì)列
void SeqQuePop(SeqQue* q) {if(q == NULL){return;//非法輸入}if(q -> size == 0){return;//空隊(duì)列}++q -> head;if(q -> head >= SEQQUEMAX){q -> head = 0;}--q -> size; }???????????????
????6. 取隊(duì)首元素
int SeqQueGetFront(SeqQue* q, SeqQueType *value) {if(q == NULL || value == NULL){return -1;//非法輸入}if(q -> size == 0){return -1;//空隊(duì)列}*value = q -> data[q -> head];return 0; }???????????????
????7. 銷毀隊(duì)列
void SeqQueDestroy(SeqQue* q) {if(q == NULL){return;//非法輸入}q -> size = 0;q -> head = 0;q -> tail = 0; }???????????????
總結(jié)
- 上一篇: 双向带环带头结点的链表实现栈
- 下一篇: 超级小郎中剧情介绍