還是一道題
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 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列的資料元素又稱為佇列元素。在佇列中插入乙個佇列元素稱為入隊,從佇列中刪除乙個佇列元...