循环链队列问题——这个enqueue函数哪里错了
代码如下,插入x时好像结果是插队首去了
#include<stdio.h>
#include<stdlib.h>
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}linkqueue;
linkqueue *creat(void)
{
linkqueue *s,*rear;
datatype x;
s=(linkqueue *)malloc(sizeof(linkqueue));
s->next=s;
rear=s;
scanf("%d",&x);
while(x!=0)
{
s=(linkqueue *)malloc(sizeof(linkqueue));
s->data=x;
s->next=rear->next;
rear->next=s;
rear=s;
scanf("%d",&x);
}
return rear;
}
void ENQUEUE(linkqueue *rear,datatype x)
{
linkqueue *s;
s=(linkqueue *)malloc(sizeof(linkqueue));
s->data=x;
s->next=rear->next;
rear->next=s;
rear=s;
}
void OUTQUEUE(linkqueue *rear)
{
linkqueue *s;
if(rear==rear->next)
printf("队空");
else
{
s=rear->next->next;
rear->next->next=s->next;
free(s);
}
}
void list(linkqueue *rear)
{
linkqueue *s;
if(rear==rear->next)
printf("队空");
else
{
s=rear->next->next;
printf("%d ",s->data);
while(s!=rear)
{
s=s->next;
printf("%d ",s->data);
}
}
printf("\n");
}
void main()
{
linkqueue *rear;
datatype x;
int i,j;
printf("请输入链队元素若干,以“0”结尾:\n");
rear=creat();
printf("链队元素:\n");
list(rear);
for(i=0;i<3;i++)
{printf("出队后元素:\n");
OUTQUEUE(rear);
list(rear);}
printf("请输入要插入的元素x:\n");
scanf("%d",&x);
ENQUEUE(rear,x);
printf("入队后元素:\n");
list(rear);
}
[解决办法]
修改指针后指针的值丢失的问题。
http://topic.csdn.net/u/20120319/15/0751ad00-bad3-481b-9f3a-fed7409cb9cc.html
[解决办法]
void ENQUEUE(linkqueue **rear,datatype x)
{
linkqueue *s;
s=(linkqueue *)malloc(sizeof(linkqueue));
s->data=x;
s->next=(*rear)->next;
(*rear)->next=s;
*rear=s;
}
楼主用的是值传递,是不行! 2楼的哥们已经解决了!要用地址传递!