用顺序栈的5种运算使所有的硬座车厢排列到所有的软座车厢的前面。

来源:百度知道 编辑:UC知道 时间:2024/06/22 03:13:36
设车辆厂生产了硬座车厢和软座车厢的共n节,(混合在一起),要求用顺序栈的5种运算使所有的硬座车厢排列到所有的软座车厢的前面。
【目的】1.掌握栈的数据类型描述及栈的特点
2.掌握栈的顺序和链式两种存储结构的特点和算法描述
我一点也不懂,我需要一个完整的答案,急用,谢谢大家,我提高悬赏了!

//假设车厢数为N
//a数组存放排序前的车厢
//b数组存放排序后的车厢

#define N 10

enum DataType {HARD,SOFT};

main()
{
DataType a[N]={HARD,SOFT,HARD,SOFT,HARD,SOFT,HARD,SOFT,SOFT,HARD};
DataType b[N];
Stack s;
int i,j=0;
for(i=0;i<N;i++)
{
s.push(a[i]);
if(a[i]==HARD) s.pop(b[j++]);
}
while(!s.empty())
{
s.pop(b[j++]);
}
}

主程序就这样了,至于stack的实现,你直接把教材上的伪代码改下就可以了.

#include <stdio.h>
#include <stdlib.h>

//定义栈及其操作
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
ElemType stack[MAXSIZE];
int top;//栈顶指针
} st_Stack;

void initstack(st_Stack *S)
{
S->top=-1;
}
void push(st_Stack *S,ElemType x)
{
if ( S->top == (MAXSIZE-1) )
{
printf("栈上溢出!\n");
return;
}
else
{
S->top++;
S->stack[S->top]=x;