首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

循环链队列有关问题——这个enqueue函数错哪了

2012-06-09 
循环链队列问题——这个enqueue函数哪里错了代码如下,插入x时好像结果是插队首去了#includestdio.h#includ

循环链队列问题——这个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楼的哥们已经解决了!要用地址传递!

热点排行