0

A、B、C の 3 つのスタックがあります。

スタック A と B が並べ替えられます (スタックの一番上にある数字が最大になります)。スタック C は空です 5 つの操作のみが許可されます:

プッシュ、ポップ、トップ、is_empty、作成

スタック A と B を受け取り、スタック A と B のすべての数値をスタック C に移動し、スタック C をソートする必要がある (最大の数値が一番上にある) 関数を作成する必要があります。

私はアルゴリズムを持っています:

A の上部と B の上部を比較する

最小の要素をポップし、スタック C にプッシュします

スタック (A または B) のいずれかが空になるまで、手順 2 を繰り返します。

残りの要素を空でないスタックから 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

たくさんのエラーがあり、その多くはpush署名に帰着します:

void push(STACK s,int item)

次のようになります。

void push(STACK *s,int item)

STACK残りは、構造体のアドレスを関数に渡さないことに帰着します。次に例を示します。

push(a,x);

次のようにする必要があります。

push(&a,x);

またmain、常に次を返す必要がありますint

int main()
于 2013-05-25T18:00:47.157 に答える