0

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

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

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

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

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

>

Compare top of A with top of 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 4
typedef struct
{
    int num;
}ITEM;

typedef struct
{
    ITEM a[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;
}

ITEM pop(STACK *s)
{
    return s->a[s->top--];
}

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

ITEM top(STACK *s)
{
    return s->a[s->top];
}



void sort (STACK *a,STACK *b,STACK *c)
{
int i;
    ITEM y,x;
    while(!is_empty(a)||!is_empty(b))
    {

y=top(a);
x=top(b);

  if(&y>&x)
   {
    push(c,&x);
    pop(b);
   }
  else
    {
     push(c,&y);
         pop(a);

    }
}
if(!is_empty(a))
{
while(!is_empty(a))
x=pop(a);
push(c,&x);
}

else
while(!is_empty(b))
{
x=pop(b);
push(c,&x);
}

while(!is_empty(c))
{
x=pop(c);
push(a,&x);
}

while(!is_empty(a))
{
x=pop(a);
push(b,&x);
}

while(!is_empty(b))
{
x=pop(b);
push(c,&x);
}

for(i=0;i<MAX_MEMBERS-1;i++)
printf("%d",c->a[i]);
}

void main(void)
{
 int i;
STACK a,b,c;
ITEM x;
create_stack(&a);
create_stack(&b);
create_stack(&c);

 for(i=0;i<4;i++)
 {
printf("\nEnter a number to insert for A: ");
scanf("%d",&x.num);
push(&a,&x);
 }

 for(i=0;i<4;i++)
 {
printf("\nEnter a number to insert for B: ");
scanf("%d",&x.num);
push(&b,&x);
 }

    sort(&a,&b,&c);

}

私はコードをデバッグし、どこに問題があるかを見ました..それはここにあります: if(&y>&x) このブール条件に対して常に「真」の値を与えます.. x

4

1 に答える 1

0

変数自体ではなく、変数のアドレスを比較するため

于 2013-05-20T22:45:18.727 に答える