雙端鏈式佇列實現

2021-10-04 20:57:01 字數 1558 閱讀 2916

/**

* 雙端佇列,使用雙向鍊錶實現

* 隊頭、隊尾都可以進行入隊、出隊操作的佇列

* 雙端佇列的每一端都是乙個棧,都符合棧先進後出的特性

* 雙端佇列是一種多功能的資料結構,可以使用它來提供佇列和棧兩種功能

*/#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...