演算法總結 棧 佇列 c語言實現

2021-10-04 10:15:26 字數 1999 閱讀 8567

還是一道題

typedef

struct node1 d;

typedef

struct node2 z;

d d1,d2;

z z;

//初始化佇列d1和d2,此時兩人手中沒有牌 

d1.head =

0; d1.tail =0;

d2.head =

0; d2.tail =0;

//初始化棧z為空,最開始桌面上也沒有牌

z.top =

0;

//讀入d1手牌

for(

int i=

0;i<

6;i++

)//讀入d2手牌

for(

int j=

0;j<

6;j++

)

t = d1.data[d1.head];if

(book[t]==0

)else

//將相同的兩個數的另外乙個出棧入對

d1.data[d1.tail]

= z.data[z.top]

; d1.tail++

;//更新隊尾位置

book[z.data[z.top]]=

0;z.top--

;}

#include

typedef

struct node1 d;

typedef

struct node2 z;

/* 讓兩個佇列來模擬人,乙個棧來模擬桌面

*/main()

;//初始化佇列d1和d2,此時兩人手中沒有牌

d1.head =

0; d1.tail =0;

d2.head =

0; d2.tail =0;

//初始化棧z為空,最開始桌面上也沒有牌

z.top =0;

//讀入d1手牌

for(

int i=

0;i<

6;i++

)//讀入d2手牌

for(

int j=

0;j<

6;j++

)while

(d1.head < d1.tail && d2.head else

//將相同的兩個數的另外乙個出棧入對

d1.data[d1.tail]

= z.data[z.top]

; d1.tail++

;//更新隊尾位置

book[z.data[z.top]]=

0;z.top--;}

t = d2.data[d2.head]

;//d2出牌

if(book[t]==0

)else

//將相同的兩個數的另外乙個出棧入對

d2.data[d2.tail]

= z.data[z.top]

; d2.tail++

;//更新隊尾位置

book[z.data[z.top]]=

0;z.top--;}

}if(d2.head == d2.tail)

if(z.top>0)

}else

}else

if(z.top>0)

}else

}}

使用dev是可以實現的

測試用例:

2 4 1 2 5 6 

3 1 3 5 6 4

d2獲勝

d2當前手牌為:6 5 2 3 4 1

桌上的牌為:3 4 5 6 2 1

書上說上面的**還不完善,一些特殊測試資料會沒有結果,一直迴圈下去。就是說現在的程式不怎麼"健壯"。

2020/3/25/22/45

C語言實現棧和佇列

標頭檔案 stack.h pragma once include include include typedef int stdatatype typedef struct stack stack 初始化棧 void stackinit stack pst 入棧 void stackpush sta...

棧,佇列的C語言實現

棧的c語言實現 佇列的c語言實現 棧 後進先出 允許插入和刪除的一端叫棧頂top 不允許的一端叫棧底bottom 主要操作 進棧 出棧 判斷棧滿和棧空 有兩個現成的函式 int push int s,int x,int ptop int pop int s,int py,int ptop 直接拿過來...

C語言實現,順序佇列,迴圈佇列,和棧!

佇列是一種特殊的 線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列的資料元素又稱為佇列元素。在佇列中插入乙個佇列元素稱為入隊,從佇列中刪除乙個佇列元...