題目:
利用鏈棧逆置鏈佇列。
演算法中文描述:
1、建立乙個佇列,在建佇列的同時,採用陣列儲存佇列中的元素;
2、輸出該佇列,由於在此處如果呼叫
()函式輸出佇列元素的話會導致佇列的隊頭和隊尾指標都指向隊尾,這樣使得後面的逆置等操作無法實現,因此採用順序輸出陣列元素的方法來輸出佇列元素,這也是步驟
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...