1.1、共享棧的設置,問題描述如下:
在一維數(shù)組空間stack[MaxSize]中可以同時存放兩個順序棧,棧底分別處在數(shù)組的兩端,當?shù)?個棧的棧頂指針top1等于-1時則棧1為空,當?shù)?個棧的棧頂指針top2等于MaxSize時則棧2為空。兩個棧均向中間增長,當有元素向棧1進棧時,使top1增1得到新的棧頂位置,當有元素向棧2進棧時,使top2減1得到新的棧頂位置。當top1==top2-1或top1+1==top2時,存儲空間用完,無法再向任一棧做進棧操作,此時可考慮給出錯誤信息并停止運行。
要求:
⑴ 給出共享棧的順序存儲類型定義。
⑵ 給出共享棧的抽象數(shù)據(jù)類型定義。
⑶ 建立頭文件SeqStack.h,包含共享棧的基本操作實現(xiàn)函數(shù);建立主程序文件test4_1.cpp,在主函數(shù)中對共享棧的各個操作進行測試。

共享棧.gif
//返回函數(shù)狀態(tài)
typedef int Status;
//元素類型
typedef int ElemType;
//共享棧棧結構
typedef struct {
ElemType *data;
int top1; // 棧1棧頂指針
int top2; // 棧2棧頂指針
int stacksize; //當前已分配的存儲空間
} ShareStack;
//創(chuàng)建共享棧
Status Init_Share_Stack(ShareStack &s) ;
//判斷共享棧是否為空
Status Empty_Share_Stack(ShareStack &s) ;
//入棧
Status Push_Share_Stack(ShareStack &s, ElemType e, int Stack_Number) ;
//出棧
Status Pop_Share_Stack(ShareStack &s, ElemType &e, int Stack_Number) ;
//共享棧長度
Status Length_Share_Stack(ShareStack &s) ;
//共享棧棧頂元素
ElemType Get_Share_Stack(ShareStack &s, ElemType &e, int Stack_Number);
//清空棧
Status Clear_Share_Stack(ShareStack &s) ;
//打印共享棧所有元素
Status Traverse_Share_Stack(ShareStack &s) ;
//銷毀共享棧
Status Destroy_Share_Stack(ShareStack &s) ;
1.2、利用上述共享棧,實現(xiàn)火車車廂的調度模擬
設火車車廂分為三類:硬座、硬臥、軟臥,分別用A、B、C表示。下圖描述車廂調度的示意圖,圖中右端為排列無序的車廂,左端為調度后的車廂排列,使得所有軟臥車廂在最前面、所有硬臥車廂在中間、所有硬座車廂在最后。
編程模擬上述車廂調度過程。
提示:兩個輔助鐵軌相當于兩個棧,右端車廂進入用相應字符串給出,如“BBACBCAABBCAA”,左端車廂的序列放在一個鏈式存儲的隊列中。在LinkQueue.h給出模擬函數(shù),并在test4_2.cpp中進行調用測試。

小火車

共享棧_小火車.gif
//返回函數(shù)狀態(tài)
typedef int Status;
//元素類型
typedef char ElemType;
//共享棧棧結構
typedef struct {
ElemType *data;
int top1; // 棧1棧頂指針
int top2; // 棧2棧頂指針
int stacksize; //當前已分配的存儲空間
} ShareStack;
//鏈式存儲
typedef struct QNode{
ElemType data;
struct QNode *next;
}QNode,*QueuePtr;
//隊列
typedef struct{
QueuePtr front; //隊頭指針
QueuePtr rear; //隊尾指針
}LinkQueue;
//創(chuàng)建共享棧
Status Init_Share_Stack(ShareStack &s);
//入棧
Status Push_Share_Stack(ShareStack &s, ElemType e, int Stack_Number);
//出棧
Status Pop_Share_Stack(ShareStack &s, ElemType &e, int Stack_Number) ;
Status Length_Share_Stack_A(ShareStack &s) ;
Status Length_Share_Stack_B(ShareStack &s) ;
//清空棧
Status Clear_Share_Stack(ShareStack &s) ;
//銷毀共享棧
Status Destroy_Share_Stack(ShareStack &s);
//創(chuàng)建隊列
Status InitQueue(LinkQueue &Q)
//清空隊列
Status ClearQueue(LinkQueue &Q);
//銷毀隊列
Status DestroyQueue(LinkQueue &Q) ;
//判斷隊列是否為空
Status QueueEmpty(LinkQueue &Q) ;
//獲取隊列長度
int QueueLength(LinkQueue &Q) ;
//入隊
Status EnQueue(LinkQueue &Q, ElemType e) ;
//出隊
Status DeQueue(LinkQueue &Q, ElemType e) ;