美文网首页
实验四——共享栈和小火车

实验四——共享栈和小火车

作者: 林之禾 | 来源:发表于2018-04-18 19:46 被阅读0次

1.1、共享栈的设置,问题描述如下:
在一维数组空间stack[MaxSize]中可以同时存放两个顺序栈,栈底分别处在数组的两端,当第1个栈的栈顶指针top1等于-1时则栈1为空,当第2个栈的栈顶指针top2等于MaxSize时则栈2为空。两个栈均向中间增长,当有元素向栈1进栈时,使top1增1得到新的栈顶位置,当有元素向栈2进栈时,使top2减1得到新的栈顶位置。当top1==top2-1或top1+1==top2时,存储空间用完,无法再向任一栈做进栈操作,此时可考虑给出错误信息并停止运行。
要求:
⑴ 给出共享栈的顺序存储类型定义。
⑵ 给出共享栈的抽象数据类型定义。
⑶ 建立头文件SeqStack.h,包含共享栈的基本操作实现函数;建立主程序文件test4_1.cpp,在主函数中对共享栈的各个操作进行测试。


共享栈.gif
//返回函数状态
typedef int Status;
//元素类型
typedef int ElemType;
//共享栈栈结构
typedef struct {
    ElemType *data;
    int top1; // 栈1栈顶指针
    int top2; // 栈2栈顶指针
    int stacksize; //当前已分配的存储空间
} ShareStack;
//创建共享栈
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、利用上述共享栈,实现火车车厢的调度模拟
设火车车厢分为三类:硬座、硬卧、软卧,分别用A、B、C表示。下图描述车厢调度的示意图,图中右端为排列无序的车厢,左端为调度后的车厢排列,使得所有软卧车厢在最前面、所有硬卧车厢在中间、所有硬座车厢在最后。
编程模拟上述车厢调度过程。
提示:两个辅助铁轨相当于两个栈,右端车厢进入用相应字符串给出,如“BBACBCAABBCAA”,左端车厢的序列放在一个链式存储的队列中。在LinkQueue.h给出模拟函数,并在test4_2.cpp中进行调用测试。
![

小火车
共享栈_小火车.gif
//返回函数状态
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;
//创建共享栈
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);
//创建队列
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) ;


如果有问题记得和我说一下,谢谢


相关文章

  • 实验四——共享栈和小火车

    1.1、共享栈的设置,问题描述如下:在一维数组空间stack[MaxSize]中可以同时存放两个顺序栈,栈底分别处...

  • [libco] 协程栈空间

    协程“栈”空间,有独立栈和共享栈,重点理解一下协程共享栈。 文章来源:[libco] 协程栈空间[https://...

  • 顺序栈两栈共享及实现

    两栈共享 顺序栈的两栈共享是指两个栈共享一个数组。 两个栈的栈底分别为0和length-1。当top[0]+1=t...

  • B - Train Problem I

    火车问题答案解题思路 1.如果待入栈火车和最顶目标火车相同就进行连续进栈出栈; 2.若是不相同则只是进栈就行; 3...

  • 《深入理解计算机系统》(CSAPP)实验四 —— Attack

    这是CSAPP的第四个实验,这个实验比较有意思,也比较难。通过这个实验我们可以更加熟悉GDB的使用和机器代码的栈和...

  • 顺序存储结构栈 共享栈 链式存储结构栈

  • 2018-01-03三题

    1.堆内存和栈内存的区别是什么? 线程的堆内存空间是共享的,栈内存空间才是独立的(堆共享,栈独立)。 2.wait...

  • 栈(两栈共享空间结构)

    栈:限定只能在表尾进行插入和删除的线性表。 两栈共享空间结构:使用数组同时实现两个栈,即栈1和栈2;栈1为空时,栈...

  • golang并发,简之道

    Goroutines 模型:和其他goroutine在共享的地址空间中并发执行的函数 资源消耗: 初始时非常小的栈...

  • 2018-05-08

    线程、进程、协程的区别 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。 线程拥有自己独立的...

网友评论

      本文标题:实验四——共享栈和小火车

      本文链接:https://www.haomeiwen.com/subject/sewvkftx.html