giladbig משתמש מתחיל
הצטרף / הצטרפה: 21 May 2009 מדינה: Israel
משתמש: מנותק/ת הודעות: 1
|
נשלח בתאריך: 21 May 2009 בשעה 00:41 | | IP רשוּם
|
|
|
|
שלום לכולם
אני צריך לממש מחסנית בעזרת מערך, בשפת C
יש לי כבר פונקציות מוכנות שמדמות מערך
השאלה שלי היא, הן הרי מחזירות INT 0 או 1
ופויינטר שמשנה את ערכו, שמצביע למבנה.
איך אני למשל משווה בין שני איברים ראשונים במערכים שונים
pop(s)==pop(st)
הרי הקומפיילר יתייחס לזה כאל 1=1 או ל0=0 ולא לאיבר עצמו.
כשניסיתי להשוות את האיבר עצמו, הוא לא נתן לי כי זה מצביע למבנה-
#include <stdio.h>
#include <conio.h>
#define N 4
typedef struct
{
int num;
}ITEM;
typedef struct
{ITEM arr[N];
int top;
}STACK;
int create(STACK *s)
{
s->top=-1;
return 1;
}
int is_empty(STACK *s)
{
return s->top==-1;
}
int is_full(STACK *s)
{
return s->top==N-1;
}
int pop (STACK *s, ITEM *i)
{
if (is_empty(s))
return 0;
*i=s->arr[s->top--];
return 1;
}
int push (STACK *s, ITEM *i)
{
if (is_full(s))
return 0;
s->arr[++s->top]=*i;
return 1;
}
int top(STACK *s,ITEM *i)
{
if (is_empty(s))
return 0;
*i=s->arr[s->top];
return 1;
}
void ex1(STACK *a,STACK *b,STACK *c,ITEM *i) //maybe order is wrong=checking a[0] maybe need to check end of array
{
while (!is_empty(a) && !is_empty(b))
{
// pop(b,i);
// pop(a,i);
if (a->arr!=b->arr)
if (a->arr<b->arr)
{
push (c,a->arr);
pop(a,i);
}
else {
push (c,b->arr);
pop(b,i);
}
else {
push(c,b->arr);
pop(b,i);
pop(a,i);
}
for (int j=N*2; j>=0;j--)
printf( ".............%d\n",c->arr[j]);
printf ( "/////////////////\n");
}
while (!is_empty(a))
{
push (c,a->arr);
pop(a,i);
}
while (!is_empty(b))
{
push (c,b->arr);
pop(b,i);
}
}
void main(void)
{
STACK a,b,c;
ITEM i;
clrscr();
create(&a);
create(&b);
create(&c);
for (int j=0; j<(N);j++)
{
scanf( "%d",&i);
push (&a,&i);
}
for (j=0; j<(N);j++)
{
scanf( "%d",&i);
push (&b,&i);
}
/*if(pop(&a,&i))
printf("....%d",pop(&a,&i));
printf(".........%d",i.num);
printf(".............%d",a.arr[0]);
*/
ex1(&a,&b,&c,&i);
//for (j=N*2; j>=0;j--)
// {
// printf(".............%d\n",c.arr[j]);
// }
}
|