實驗四——共享棧和小火車

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) ;


如果有問題記得和我說一下,謝謝


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1.棧 1.1.棧的定義 棧(stack)是限定僅在表尾(棧頂 top)進行插入和刪除操作的后進先出的線性表。 p...
    JonyFang閱讀 1,592評論 0 21
  • 數(shù)據(jù)結構與算法--棧 我們可能都有這樣的經歷:小時候交作業(yè),放到老師的講臺上。先交的作業(yè)的肯定會在最底下,最后幾個...
    sunhaiyu閱讀 422評論 0 1
  • 記得大一的時候自學數(shù)據(jù)結構,那時候卻沒有深入的去研究代碼,只是了解了個表面的東西,不過還好有基礎,并且去年的時候看...
    KevinCool閱讀 704評論 1 3
  • 感恩今天一大早起來就看見大雪紛飛,不由的就哇了一聲好美的雪下雪雖然天變冷了但是空氣好多了。 感恩抱著孫女寶寶在窗口...
    秦東娥閱讀 297評論 0 0
  • (一) 晨跑 月出山東角,紫霞巒后浮。 步履村間徑,犬吠掠耳鼓。 胸背汗涔涔,兩股濕漉漉。 周天感輕松,意美盡情訴...
    把福帶回家閱讀 684評論 0 1

友情鏈接更多精彩內容