当前位置: 首页 > >

C语言链式队列代码实现

发布时间:

linkqueue.h ? ?//链式队列的头文件


#include
#include
#include

typedef int datatype; /*定义链队列中数据元素的数据类型*/

typedef struct linkqueuenode{ //使用单链表记录数据的入队(队头添加节点)和出队(队尾删除节点)
datatype data; /*数据域*/
struct linkqueuenode *next; /*链接指针域*/
}linkqueue_node,*linkqueue_pnode; /*链表元素类型定义*/

typedef struct linkqueue{ //定义一个结构体,记录队列(单链表)中的头结点和尾节点
linkqueue_pnode front,rear;
}link_queue,*link_pqueue;

extern void init_linkqueue(link_pqueue *Q); //创建队列
extern bool is_empty_linkqueue(link_pqueue q); //判断队列是否为空
extern bool in_linkqueue(datatype data,link_pqueue q); //入队
extern bool out_linkqueue(link_pqueue q,datatype *D); //出队
extern void show_linkqueue(link_pqueue q); //依次显示队头到队尾的数据
extern void free_linkqueue(link_pqueue q); //释放队列

#endif

linkqueue.c ? ? //链式队列相关函数的实现方法


#include "linkqueue.h"

void init_linkqueue(link_pqueue *Q) //创建队列
{
//申请front和rear的空间
*Q=(link_pqueue)malloc(sizeof(link_queue));
if((*Q)==NULL)
{
perror("malloc");
exit(-1);
}
//申请头结点空间
(*Q)->front=(linkqueue_pnode)malloc(sizeof(linkqueue_node));
if((*Q)->front==NULL)
{
perror("malloc");
exit(-1) ;
}

(*Q)->front->next=NULL;
(*Q)->rear=(*Q)->front;

return;
}
//入对
bool in_linkqueue(datatype data,link_pqueue q)
{
linkqueue_pnode new;

//申请数据结点空间
new=(linkqueue_pnode)malloc(sizeof(linkqueue_node));
if(new==NULL)
{
puts("入队失败!");
return false;
}
//将数据存储在申请的空间
new->data=data;

//将new指向的结点插入到链式队列中
new->next=q->rear->next; //这里等价于new->next = NULL;
q->rear->next=new;

//让rear指针指向新的队尾结点
q->rear=q->rear->next; //等价于q->rear = new;

return true;
}
bool is_empty_linkqueue(link_pqueue q) //判断队列是否为空
{
if(q->rear == q->front)
return true;
else
return false;
}
//出队
bool out_linkqueue(link_pqueue q,datatype *D)
{
linkqueue_pnode t;
//判断队列是否空
if(is_empty_linkqueue(q)){
printf("队列已空!
");
return false;
}

//出队
t=q->front;
q->front =q->front->next;
*D=q->front->data;
free(t);

return true;
}

void show_linkqueue(link_pqueue q) //依次打印队头到队尾的数据
{
linkqueue_pnode p;
if(is_empty_linkqueue(q))
return;
//非空时,从对头打印到队尾
for(p=q->front->next;p!=NULL;p=p->next)
{
printf("%d ",p->data);
}
printf("
");
}

void free_linkqueue(link_pqueue q) //释放队列
{
link_pqueue p;
p = q->front;
while(p)
{
q->front = q->front->next;
free(p);
p = q->front;
}
free(q);
}




友情链接: 高中资料网 职业教育网 成人教育网 理学 大学工学资料