30/09/2018, 20:09
Cần giải đáp về HÀNG ĐỢI!
Mình có CODE sau:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max 100
struct sv
{
int ma;
char ht[20];
};
struct queue
{
sv data[max];
int f,r;
};
void kt(queue &q)
{
q.f=q.r=-1;
}
int ktr(queue q)
{
if (q.f==-1&&q.r==-1)
return 1;
else
return 0;
}
int ktd(queue q)
{
if (q.f==0&&q.r==max-1)
return 1;
else
return 0;
}
void push(queue &q, sv x)
{
if (ktd(q))
printf("day");
else
{q.r++;
q.data[q.r]=x;
}
}
sv pop(queue &q)
{
if(ktr(q))
printf("rong");
else
{sv x=q.data[q.f];
for(int i=q.f;i<q.r;i++)
q.data[i]=q.data[i+1];
q.r--;
return x;
}}
void nhap(queue &q)
{
sv x;
int n, i;
printf("n="); scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("ma"); scanf("%d",&x.ma);
printf("ten"); fflush(stdin); gets(x.ht);
push(q,x);
}
}
void xuat(queue q)
{int i;
[ for(i=q.f;i<q.r;i++)
{
printf("%d %s", q.data[i].ma, q.data[i].ht);
}
}
main()
{
queue q;
kt(q);
nhap(q);
xuat(q);
pop(q);
xuat(q);
getch();
}'
Mình muốn hỏi phần
void push(queue &q, sv x)
{
if (ktd(q))
printf("day");
else
{q.r++;
q.data[q.r]=x;
}
}
và phần
sv pop(queue &q)
{
if(ktr(q))
printf("rong");
else
{sv x=q.data[q.f];
for(int i=q.f;i<q.r;i++)
q.data[i]=q.data[i+1];
q.r--;
return x;
}}
Tại sao ở phần push lại là q.data[q.r]=x mà không phải là x=q.data[q.r]; ? Mình không hiểu . ở phần pop cũng vậy!
Bài liên quan
Bạn ơi bạn cho code vào markdown đi
Rồi mọi người sẽ cùng thảo luận XD
sao mình k sửa đc markdown !!! giúp mình với
Bạn thông cảm mình không sửa bài viết của bạn được
Bạn cho code của bạn vào giữa 3 dấu ``` này nhé
Nếu không được thì sẽ nhờ sự trợ giúp của các leader hoặc anh Đạt
Queue hàng đợi, theo nguyên tắc vào trước ra trước, FIFO.
Lệnh push: đẩy vào cuối hàng
Lệnh pop: nhấc ra khỏi đầu hàng
Ngoài push, pop còn có lệnh shift và peek.