生活随笔
收集整理的這篇文章主要介紹了
链表实现队列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上篇博客是用順序表實現隊列, 現在用雙向帶頭結點帶環鏈表實現對隊列的出隊列, 入隊列, 取隊首元素, 以及銷毀隊列的相關操作
????1.初始化鏈表
void DLinkQueInit(DLinkQue** q)
{
if(q == NULL){
return;}
if(*q == NULL){
return;}*q = (DLinkQue*)
malloc(
sizeof(DLinkQue));(*q) -> next = *q;(*q) -> prev = *q;(*q) -> data =
0;
}
????2.入隊列
void DLinkQuePush(DLinkQue* q, DLinkQueType value)
{
if(q == NULL){
return;}DLinkQue* new_node = DLinkQueCreatNewNode(value);DLinkQue* prev = q -> prev;prev -> next = new_node;new_node -> prev = prev;new_node -> next = q;q -> prev = new_node;
}
????3. 出隊列
void DLinkQuePop(DLinkQue* q)
{
if(q == NULL){
return;}
if(q -> next == NULL){
return;}
if(q -> next == q){
return;}DLinkQue* to_delete = q -> next;DLinkQue* next = to_delete -> next;q -> next = next;next -> prev = q;DLinkQueDestroyNode(to_delete);to_delete = NULL;
}
????4. 取隊首元素
int DLinkStackGetFront(DLinkStack*
stack, DLinkStackType* value)
{
if(
stack == NULL){
return -
1;}
if(
stack -> next ==
stack){
return -
1;}*value = (
stack -> prev) -> data;
return 0;
}
int DLinkStackSize(DLinkStack*
stack)
{
if(
stack == NULL){
return 0;}
if(
stack -> next ==
stack){
return 0;}DLinkStack* cur =
stack -> next;
int size =
0;
for(; cur !=
stack; cur = cur -> next){size++;}
return size;
}
????5. 銷毀隊列
void DLinkQueDestroy(DLinkQue** q)
{
if(q == NULL){
return;}
if(*q == NULL){
return;}
int i = DLinkQueSize(*q);DLinkQue* to_delete;DLinkQue* next;
for(; i >
0; i--){to_delete = (*q) -> next;next = to_delete -> next;(*q) -> next = next;next -> prev = *q;DLinkQueDestroyNode(to_delete);to_delete = NULL;}DLinkQueDestroyNode(*q);*q = NULL;
}
總結
以上是生活随笔為你收集整理的链表实现队列的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。