/*** 雙端佇列,使用雙向鍊錶實現
* 隊頭、隊尾都可以進行入隊、出隊操作的佇列
* 雙端佇列的每一端都是乙個棧,都符合棧先進後出的特性
* 雙端佇列是一種多功能的資料結構,可以使用它來提供佇列和棧兩種功能
*/#include #include "queue.h"
typedef struct doublelinknodedoublelinknode;typedef struct doubleendsqueuedoubleendsqueue;
void initdoublequeue(doubleendsqueue *dq)dq->front =null;
dq->rear = null;
}bool isdoublequeueempty(doubleendsqueue *dq)
if (dq->rear==dq->front)
return false;
}int doublequeuelength(doubleendsqueue *dq)
if (dq->front==null||dq->rear==null)
doublelinknode*p = dq->front;
int count = 0;
while(p!=null)
return count;
}void pushleft(doubleendsqueue *dq,int val)
doublelinknode*p = (doublelinknode*)malloc(sizeof(doublelinknode));
p->data = val;
p->next =null;
p->prev = null;
if (dq->front==null)else
}void pushright(doubleendsqueue *dq,int val)
doublelinknode*p = (doublelinknode*)malloc(sizeof(doublelinknode));
p->data = val;
p->next =null;
p->prev = null;
if (dq->rear==null)else
}int popleft(doubleendsqueue *dq)
doublelinknode*p =dq->front;
int val = dq->front->data;
dq->front=p->next;
if (dq->front!=null)
free(p);
return val;
}int popright(doubleendsqueue *dq)
doublelinknode*p = dq->rear;
int val = dq->rear->data;
dq->rear=p->prev;
if (dq->rear!=null)
free(p);
return val;
}
實現雙端佇列
1.雙端佇列是乙個限定插入和刪除操作的資料結構,具有佇列和棧的性質。2.雙端佇列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。3.雙端佇列是指允許兩端都可以進行入隊和出隊操作的佇列,其元素的邏輯結構仍是線性結構。將佇列的兩端分別稱為前端和後端,兩端都可以入隊和出隊。利用python的l...
堆疊 佇列 雙端佇列實現
author hao rui chun class stack object def init self self.lis defpush self,item 入棧 defpop self 出棧 self.lis.pop def peek self 獲取棧頂元素 if self.lis return...
python實現雙端佇列
雙端佇列 一種具有佇列和棧的性質和資料結構 雙端佇列中的元素可以從兩端彈出,其限定插入和刪除操作,在表的兩端進行,雙端佇列可以在佇列任意一端入隊和出隊 class deque 雙端佇列 def init self self.list def add front self,item 往佇列中新增乙個i...