本題要求在乙個陣列中實現兩個堆疊。
函式介面定義:
stack createstack
(int maxsize )
;bool push
( stack s, elementtype x,
int tag )
;elementtype pop
( stack s,
int tag )
;
其中tag
是堆疊編號,取1或2;maxsize
堆疊陣列的規模;stack
結構定義如下:
typedef
int position;
struct snode
;typedef
struct snode *stack;
注意:如果堆疊已滿,push
函式必須輸出「stack full」並且返回false
;如果某堆疊是空的,則pop
函式必須輸出「stack tag empty」(其中tag
是該堆疊的編號),並且返回error
。
裁判測試程式樣例:
#include
#include
#define error 1e8
typedef
int elementtype;
typedef
enum
operation;
typedef
enum
bool;
typedef
int position;
struct snode
;typedef
struct snode *stack;
stack createstack
(int maxsize )
;bool push
( stack s, elementtype x,
int tag )
;elementtype pop
( stack s,
int tag )
;operation getop()
;/* details omitted */
void
printstack
( stack s,
int tag )
;/* details omitted */
intmain()
}return0;
}/* 你的**將被嵌在這裡 *
輸入樣例:
5
push 1
1pop 2
push 2
11push 1
2push 2
12pop 1
push 2
13push 2
14push 1
3pop 2
end
輸出樣例:
stack 2 empty
stack 2 is empty!
stack full
stack 1 is full!
pop from stack 1:1
pop from stack 2:13
1211
程式**如下:
stack createstack
(int maxsize)
bool push
(stack s, elementtype x,
int tag)
else
}elementtype pop
(stack s,
int tag)
else
return s->data[s->top1--];
}else
if(tag ==2)
else
return s->data[s->top2++];
}}
ps:在本題中,top1和top2的位置是不可互換的,也就是說不能寫成下面的形式
s->top1=maxsize;
s->top2=-1
;
否則會出現執行超時的報錯資訊。
原因是在裁判程式中
printstack
(s,1);
printstack
(s,2
);
列印是從小到大,預設
s->top1 =-1
; s->top2 = maxsize;
在乙個陣列中實現兩個堆疊
初學者難題 1.如何建立這樣的乙個陣列?2.怎樣判斷棧的空滿?include include define error 1e8 typedef int elementtype typedef enum operation typedef enum bool typedef int position ...
堆疊 乙個陣列實現兩個堆疊
分析 一種聰明的辦法是使這兩個棧分別從陣列的兩頭向中間生長,當兩個指標相遇時,表時兩個棧都滿了。define maxsize 100 define elementtype int typedef struct strck,s s.top1 1 s.top2 maxsize 新增乙個元素 void p...
PTA 在乙個陣列中實現兩個堆疊
本題要求在乙個陣列中實現兩個堆疊。函式介面定義 stack createstack int maxsize bool push stack s,elementtype x,int tag elementtype pop stack s,int tag 其中tag是堆疊編號,取1或2 maxsize堆...