大家看上小弟我这个队列有什么有关问题
大家看下我这个队列有什么问题
在遍历队的时候出现死循环的状况,不知道是什么原因
#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);
}
------解决方案--------------------
在遍历队的时候出现死循环的状况,不知道是什么原因
#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); }