0

有 3 个堆栈 - A、B、C

堆栈 A 和 B 已排序(堆栈顶部的数字最大)。Stack C is Empty 只允许 5 次操作:

推送、弹出、顶部、is_empty、创建

我们需要编写一个函数来接收堆栈 A 和 B,将堆栈 A 和 B 中的所有数字移动到堆栈 C 并且堆栈 C 必须排序(最大的数字在顶部)。

我有算法:

比较 A 的顶部和 B 的顶部

弹出最少元素并推入堆栈 C

重复步骤 2,直到任何堆栈(A 或 B)变为空

将剩余元素从非空堆栈移动到 C。现在您拥有 C 中的所有元素,但按升序排列。(这是顶部的最少元素)。

将所有元素从 C 移动到 A。(A 中的内容按降序排列)

将所有元素从A移动到B。(B中的内容按升序排列)

将所有元素从 B 移动到 C。

我开始编写代码但有错误,我不知道为什么!

编码 :

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAX_MEMBERS 8

typedef struct
{
    int x[MAX_MEMBERS];
    int top;
}STACK;

void create_stack(STACK *s)
{
    s->top=-1;
}

int is_empty(STACK *s)
{
return s->top==-1;
}

int is_full(STACK *s)
{
return s->top==MAX_MEMBERS-1;
}

int pop(STACK *s)
{
    return s->x[s->top--];
}

void push(STACK *s,int item)
{
    s->x[++s->top]=item;
}

int top(STACK *s)
{
    return s->x[s->top];
}

void ex1(STACK *a, STACK *b)
{
    STACK c;
    while(!is_empty(a)&&!is_empty(b))
    {
        if(top(&a)>top(&b))

            push(&c,pop(&a));


        else if(top(&a)<top(&b))
        push(&c,pop(&b));

        else
        {
            pop(&a);
            push(&c,pop(&b));
        }
    }
    if(is_empty(&a))
    while(!is_empty(&b))
    push(&c,pop(&b));

    else while(!is_empty(&a))
    push(&c,pop(&a));

    while(!is_empty(&c))
    push(&a,pop(&c));
    while(!is_empty(&a))
    push(&b,pop(&a));
    while(!is_empty(&b))
    push(&c,pop(&b));
}


main()
{
    STACK a,b;
    int i,x;
    create_stack(&a);
    create_stack(&b);
        for(i=0;i<4;i++)
    {
        printf("enter a num for stack a :\n");
        scanf("%d",&x);
        push(&a,x);
        printf("enter a num for stack b :\n");
        scanf("%d",&x);
        push(&b,x);
    }
    ex1(a,b);
}
4

1 回答 1

0

There are a bunch of errors, many of them come down to the push signature:

void push(STACK s,int item)

which looks like it should be:

void push(STACK *s,int item)

The rest come down to not passing addresses of STACK structs to your functions, for example:

push(a,x);

should be:

push(&a,x);

Also main should always return int:

int main()
于 2013-05-25T18:00:47.157 回答