没有想到的一点是
出队步骤
1;判断队列是否为空
2;将front后面的那个节点出列 (先保存
3;判断出队的那个节点是不是rear节点***没有想到这点???
4;释放该节点内存
#include <stdio.h>
#include <stdlib.h>
//表示一个节点的类型
typedef struct linknode_t
{
int data;
struct linknode_t *next;
}linknode;
//表示一个队列的类型
typedef struct linkPoint_t
{
linknode *front;
linknode *rear;
}linkQueue;
linkQueue *queue;
linknode *node;
linkQueue *linkQueueInit();
void InlinkQueue(linkQueue *queue, int data);
int OutlinkQueue(linkQueue *queue);
int LQEmpty(linkQueue *queue);
int main()
{
linkQueueInit();
int num = 10;
while(num--){
InlinkQueue(queue, 1);
InlinkQueue(queue, 10);
InlinkQueue(queue, 100);
printf("%d\n",OutlinkQueue(queue));
printf("%d\n",OutlinkQueue(queue));
}
return 0;
}
linkQueue *linkQueueInit()
{
//队列的初始化
//1;创建一个队列
//2; 创建一个节点
//3对节点初始化
//4队列的头尾都指向这个节点
//5返回这个队列
queue = (linkQueue *)malloc(sizeof(linkQueue));
node = (linknode *)malloc(sizeof(linknode));
node->next = NULL;
queue->front = queue->rear = node;
return queue;
}
void InlinkQueue(linkQueue *queue, int data)
{
/*
入队列步骤
1;创建一个节点 初始化(赋值data next域NULL)
2;rear指向的节点与该节点连接
3;rear移动 指向该节点
*/
node = (linknode*)malloc(sizeof(linknode));
node->data = data;
node->next = NULL;
queue->rear->next = node;
queue->rear = node;
}
int OutlinkQueue(linkQueue *queue)
{
/*
出队步骤
1;判断队列是否为空
2;将front后面的那个节点出列 (先保存
3;判断出队的那个节点是不是rear节点*********没有想到这点???
4;释放该节点内存
*/
int data;
if(!LQEmpty(queue)){
node = queue->front->next;
data = node->data;
queue->front->next = node->next;
if(node == queue->rear){
queue->rear = queue->front;
}
free(node);
return data;
}else{
printf("队列为空\n");
exit(0);
}
}
int LQEmpty(linkQueue *queue)
{
if(queue->front == queue->rear){
return 1;
}else{
return 0;
}
}