本題要求在乙個陣列中實現兩個堆疊。
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
思路上比較簡單即前後雙指標,向中間靠攏。
細節處理:
一、是top1、top2的初始值。
二、棧滿和棧空的條件
我第一遍寫時,順利通過,使用下面這種寫法,但是當我想嘗試一下top1=0,top2=maxsize-1和top1使用奇數字,top2使用偶數字時,怎麼都通不過,顯示超時,我吐了,估計是題目中沒有給出的printstack
方法的問題。部落格最後補上printstack和getop方法,便於自己除錯驗證。
top1初始值為-1,top2初始值為maxsize。ac的**:
stack createstack
(int maxsize )
bool push
( stack s, elementtype x,
int tag )
if(tag ==1)
else
return true;
}elementtype pop
( stack s,
int tag )
return s->data[s->top1--];
}else
return s->data[s->top2++];
}}
補充的**(取巧的**(手動滑稽)):
operation getop()
void
printstack
(stack s,
int tag)
}else
}printf
("\n");
}
6 7 在乙個陣列中實現兩個堆疊
6 7 在乙個陣列中實現兩個堆疊 20 分 本題要求在乙個陣列中實現兩個堆疊。stack createstack int maxsize bool push stack s,elementtype x,int tag elementtype pop stack s,int tag 其中tag是堆疊編...
6 7 在乙個陣列中實現兩個堆疊
本題要求在乙個陣列中實現兩個堆疊。stack createstack int maxsize bool push stack s,elementtype x,int tag elementtype pop stack s,int tag 其中tag是堆疊編號,取1或2 maxsize堆疊陣列的規模 ...
6 7 在乙個陣列中實現兩個堆疊 20分
本題要求在乙個陣列中實現兩個堆疊。函式介面定義 stack createstack int maxsize bool push stack s,elementtype x,int tag elementtype pop stack s,int tag 其中tag是堆疊編號,取1或2 maxsize堆...