一. 隊列相關概念
?????隊列是只允許在一段進行插入元素, 在另一端進行刪除元素的線性表,即只允許對隊列進行尾插,頭刪的操作.隊列具有先進先出, 后進后出的特性.
????????
????1.初始化
void SeqQueInit(SeqQue* q)
{if(q == NULL){return;//非法輸入}q -> head = 0;q -> tail = 0;q -> size = 0;
}
????????????????
????2. 打印隊列信息
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. 擴容
void SeqQueReSize(SeqQue* q)
{if(q == NULL){return;//非法輸入}if(q -> size < SEQQUEMAX){return;//隊列未滿}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.入隊列
void SeqQuePush(SeqQue* q, SeqQueType value)
{if(q == NULL)//空隊列{q -> size++;q -> data[q -> head] = value;q -> data[q -> tail] = value;return;}if(q -> size >= SEQQUEMAX){SeqQueReSize(q);return;//滿隊列}q -> data[q -> tail++] = value;if(q -> tail > SEQQUEMAX){q -> tail = 0;}++q -> size;
}
???????????????
????5. 出隊列
void SeqQuePop(SeqQue* q)
{if(q == NULL){return;//非法輸入}if(q -> size == 0){return;//空隊列}++q -> head;if(q -> head >= SEQQUEMAX){q -> head = 0;}--q -> size;
}
???????????????
????6. 取隊首元素
int SeqQueGetFront(SeqQue* q, SeqQueType *value)
{if(q == NULL || value == NULL){return -1;//非法輸入}if(q -> size == 0){return -1;//空隊列}*value = q -> data[q -> head];return 0;
}
???????????????
????7. 銷毀隊列
void SeqQueDestroy(SeqQue* q)
{if(q == NULL){return;//非法輸入}q -> size = 0;q -> head = 0;q -> tail = 0;
}
???????????????