码迷,mamicode.com
首页 > 其他好文 > 详细

线性结构之链队列实现

时间:2016-10-24 18:11:39      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:线性结构之链队列实现

#include<stdio.h>

#include<malloc.h>

#include<stdlib.h>

typedef struct node

{

int data;

struct node *next;

}NODE,*PNODE;

typedef struct queue

{

PNODE front;

PNODE rear;

}QUEUE;

void initQueue(QUEUE *);

void enQueue(QUEUE *,int);

void deQueue(QUEUE *,int *val);

/*

不同于其他队列,我们这边是头指针指向头结点,尾指针指向的是尾结点。这都是由于操作上的方便,队列其实随意性比较大

要么是头指向第一个元素,尾指向最后一个元素的下一个元素,总之情况有你自己掌握,你觉得方便就好。

*/

void main()

{

//初始化队列

QUEUE queue;

initQueue(&queue);

//入队

enQueue(&queue,2);

enQueue(&queue,3);

enQueue(&queue,4);

enQueue(&queue,5);

//出队

int val;

deQueue(&queue,&val);

deQueue(&queue,&val);

deQueue(&queue,&val);

deQueue(&queue,&val);

}

void initQueue(QUEUE *queue)

{

//这里我们指向头结点。

queue->front=queue->rear=(PNODE)malloc(sizeof(NODE));

if(queue->front==NULL)

{

printf("内存分配失败");

exit(-1);

}

}

void enQueue(QUEUE *queue,int val)

{

PNODE pnew=(PNODE)malloc(sizeof(NODE));

if(pnew==NULL)

{

printf("内存分配失败");

exit(-1);

}

//造出的结点初始化

pnew->next=NULL;

pnew->data=val;

//开始入队,头指针不动,尾指针动

/* pnew->next=queue->rear->next; 这句话不对,这是插入方式,这里应该是追加即可。*/

queue->rear->next=pnew;

queue->rear=pnew;

}

void deQueue(QUEUE *queue,int *val)

{

//出队较为麻烦,需要考虑是不是最后一个结点,如果不是最后一个结点,出队,没有关系。只需要将尾结点指向前一个结点

//如果是最后一个结点出队的话,还需要将尾指针指向头结点。(注意头结点不是首节点)。

//首先要判断当前队列是否为空,当前队列为空,则没有办法出队列。

PNODE pnew;

if(queue->front==queue->rear)

{

printf("当前队列为空,无法出队");

return;

}

pnew=queue->front->next;

*val=pnew->data;

printf("%d ",*val);


if(pnew==queue->rear)

{

queue->front->next=queue->front->next->next;

queue->rear=queue->front;

}else

queue->front->next=queue->front->next->next;//也可以把这句代码和if里面那句代码提到printf后面,为一句代码,但是这样来的话,就是可读性差点

free(pnew);

printf("\n");

}

//也可以把queue->rear=queue->front;和if里面那句代码提到printf后面,为一句代码,但是这样来的话,就是可读性差点

//到底是代码可读性需要高点,还是代码更加简洁,减少冗余,自己去衡量吧!我就喜欢这样,逻辑性很好,只要不影响效率。


本文出自 “简答生活” 博客,转载请与作者联系!

线性结构之链队列实现

标签:线性结构之链队列实现

原文地址:http://1464490021.blog.51cto.com/4467028/1864909

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!