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

大家看上小弟我这个队列有什么有关问题

2012-09-04 
大家看下我这个队列有什么问题在遍历队的时候出现死循环的状况,不知道是什么原因#includestdio.h#includ

大家看下我这个队列有什么问题

在遍历队的时候出现死循环的状况,不知道是什么原因

#include<stdio.h>
#include<stdlib.h>
struct node{
struct node *prev;
struct node *next;
int data;
};
int n = 0;
struct queue{
struct node *head_node;
struct node *tail_node;
};

struct queue *create(void) //创建队
{
struct queue *queue = (struct queue *)malloc(sizeof(struct queue));
struct node *head_node = (struct node *)malloc(sizeof(struct node));
queue->head_node =NULL;
head_node->next = head_node;
head_node->prev = head_node;
queue->head_node = head_node;
queue->tail_node = head_node;
queue->head_node->prev = NULL;
queue->tail_node->next = NULL;
return queue;
}
void in_queue(struct queue *queue,int data) //入队
{
struct node *cur_node = (struct node *)malloc(sizeof(struct node));

n++;
cur_node->data = data;
if(n == 1)
{
cur_node->prev = queue->head_node->prev;
cur_node->next = queue->tail_node->next;
queue->head_node->next = cur_node;
queue->tail_node->prev = cur_node;
}
else
{
/*cur_node->prev = queue->head_node->prev;
cur_node->next = queue->head_node;
node->prev->next = node;
node->next->prev = node;*/
cur_node->prev = queue->tail_node->prev;
cur_node->next = queue->tail_node;
cur_node->prev->next = cur_node;
cur_node->next->prev =cur_node;
/*queue->tail_node->prev->next = cur_node;
queue->tail_node->prev = cur_node;*/
}
}
void list_queue(struct queue *queue) //遍历队  
{
struct node *cur = (struct node *)malloc(sizeof(struct node));

for(cur = queue->head_node->next;cur->next != NULL;cur = cur->next)
printf("%d\n",cur->data);
}
void main()
{int data;
struct queue *queue = (struct queue *)malloc(sizeof(struct queue));
queue = create();
while(1)
{
scanf("%d",&data);
if(data == 0)
break;
else
in_queue(queue,data);
}
list_queue(queue);
}

[解决办法]

C/C++ code
#include<stdio.h>#include<stdlib.h>struct node{    struct node *prev;    struct node *next;    int data;};int n = 0;struct queue{    struct node *head_node;    struct node *tail_node;};struct queue *create(void) //创建队{    struct queue *queue = (struct queue *)malloc(sizeof(struct queue));    struct node *head_node = (struct node *)malloc(sizeof(struct node));    queue->head_node = head_node;    queue->tail_node = head_node;    queue->head_node->prev = NULL;    queue->tail_node->next = NULL;    return queue;}void in_queue(struct queue *queue, int data) //入队{    struct node *cur_node = (struct node *)malloc(sizeof(struct node));        n++;    cur_node->data = data;                                queue->tail_node->next = cur_node;            cur_node->prev = queue->tail_node;    queue->tail_node = cur_node;    cur_node->next = NULL;}void list_queue(struct queue *queue) //遍历队  {    struct node *cur = (struct node *)malloc(sizeof(struct node));        for(cur = queue->head_node->next; cur != NULL; cur = cur->next)        printf("%d\n",cur->data);}void main(){     int data;    struct queue *queue = (struct queue *)malloc(sizeof(struct queue));    queue = create();    while(1)    {        scanf("%d",&data);        if(data == 0)            break;        else            in_queue(queue, data);    }    list_queue(queue);} 

热点排行