利用鏈棧逆置鏈佇列

2021-04-26 01:46:10 字數 2112 閱讀 3076

題目:

利用鏈棧逆置鏈佇列。

演算法中文描述:

1、建立乙個佇列,在建佇列的同時,採用陣列儲存佇列中的元素;

2、輸出該佇列,由於在此處如果呼叫

print

()函式輸出佇列元素的話會導致佇列的隊頭和隊尾指標都指向隊尾,這樣使得後面的逆置等操作無法實現,因此採用順序輸出陣列元素的方法來輸出佇列元素,這也是步驟

1中用陣列儲存佇列元素的目的之所在;

3、建立乙個空棧

top;

4、依次將佇列元素全部出隊,並逐個入棧;

5、依次將棧內的全部元素出棧,並逐個將出棧的元素入隊;

6、再次輸出佇列,即完成佇列逆置。

#include

#include

#definenull0

#definemaxsize100

typedefintdatatype;

inta[maxsize];

typedefstructnode//

定義鏈棧節點型別

linkstack;

typedefstructqnode//

定義佇列節點值型別

qnode;

typedefstruct//

定義指向佇列的佇列指標

linkqueue;

linkstack*top;//

棧頂指標變數

intstackempty(linkstack*top)//

判別空棧

linkstack*push( linkstack*top,datatypex)//元素x

入棧linkstack*pop( linkstack*top)//出棧

p=top;//p

指向棧頂

top=top->next;//

棧頂指標後移

free(p);//

釋放元棧頂空間

returntop; }

datatypegetstack(linkstack*top)//

取棧頂元素

returntop->data;//

返回棧頂元素

}linkqueue*init()//

構造乙個空佇列

datatypegetqueue( linkqueue*q )//

取隊頭

returnq->front->next->data;//

返回隊頭元素

}linkqueue*enqueue( linkqueue*q,datatypex)//

入隊元素x

datatypedequeue( linkqueue*q )//

刪除隊頭元素

p=q->front->next;//讓p

指向隊頭元素

x=p->data;//

將隊頭元素的值儲存在x中

q->front->next=p->next;//

出隊if(q->rear==p)//

若隊列為空

,則修改隊尾指標指向隊頭

q->rear=q->front;

free(p);//

釋放空間

returnx;//

返回出隊元素的值

}intqueueempty( linkqueue*q )//

判斷隊列為空

linkqueue*print( linkqueue *q )//

輸出佇列

while(p->front!=p->rear);//

如果佇列不空

printf("end!/n"); }

returnq; }

linkqueue*inv( linkqueue *q)//

利用鏈棧逆置鏈佇列

while(!stackempty(top))//

將堆疊元素依次出棧併入隊

returnq;

}intmain()

printf("

逆置前:/n");

for(i=0;i

printf("[%d]->",a[i]);

printf("end!/n");

q=inv(q);

printf("

逆置後:/n");

print(q);

return0; }

鏈棧與鏈佇列

首先,我們先搞清楚,棧的原理就是現金後出,譬如往箱子裡面放球,最先放進去的最後拿出來。下面給一下我臭臭的 include include 定義結構體 struct node int main q p 列印建立的鍊錶 t head next while t null 鏈棧 先入後出,因此新入的數應該在...

順序棧 鏈棧 順序佇列 鏈佇列區別

順序棧的主要特徵是用乙個陣列實現棧的儲存,top指標確定棧頂元素位置 定義形式如下 define max 100 template class seqstack void push t x t gettop t pop bool isempty bool isfull int getsize pri...

演算法設計 鏈棧和鏈佇列 鏈棧和鏈佇列的實現

1.鏈佇列。利用帶有頭結點的單鏈表來實現鏈佇列,插入和刪除的複雜度都為o 1 include include typedef struct qnode qnode typedef struct linkqueue linkqueue void initialize linkqueue linkque...