您的位置:首页 > 理论基础 > 数据结构算法

用链表写的一个队列

2017-04-13 11:21 225 查看
以下是最近用链表写的一个队列,包括创建,入队,出队,打印等功能

/**
* @filename linkqueue.c
* @author haohaibo
* @data 2017/4/12
* @brief 用链表实现一个队列
**/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef int type_t;

typedef struct node{
type_t data;
struct node *Next;
}lqn_t;

typedef struct linkqueue_p{
lqn_t *front;
lqn_t *real;
int count;
}lq_t;

/**
* @brief 创建一个队列
*/
lq_t *linkqueue_creat()
{
lq_t *lq=(lq_t *)malloc(sizeof(lq_t));
lqn_t *n=(lqn_t *)malloc(sizeof(lqn_t));
if(NULL==lq)
{
printf(__FUNCTION__);
printf("error in line %d.\n",__LINE__);
return (lq_t*)-1;
}
n->data=0;
n->Next=NULL;
lq->front=n;
lq->real=n;
lq->count =0;
return lq;
}

/**
* @brief 入列
*/
int linkqueue_in(lq_t *lq,type_t value)
{
lqn_t *n=(lqn_t *)malloc(sizeof(lqn_t));
if(NULL==n)
{
printf(__FUNCTION__);
printf("error in line %d.\n",__LINE__);
return -1;
}

n->data=value;
n->Next=NULL;
lq->real->Next=n;
lq->real=n;
lq->count++;
return 0;
}

/**
* @brief 出列
*/
type_t linkqueue_out(lq_t *lq)
{
lqn_t *n;
type_t value;
if(lq->real==lq->front)
{
puts("error ");
exit(1);
}
n=lq->front->Next;
value=n->data;
lq->front->Next=n->Next;
if(lq->real==n)
lq->real=lq->front;
free(n);
n=NULL;
lq->count--;
return value;
}

/**
* @brief 全部元素出列
*/
int linkqueue_outall(lq_t *lq)
{
int i=lq->count;
if(lq->real==lq->front)
{
puts("error ");
exit(1);
}
while(i--)
linkqueue_out(lq);
}

/**
* @brief 打印队列元素
*/
int linkqueue_show(lq_t *lq)
{
lqn_t *p;
p=lq->front;
while(lq->front->Next!=NULL)
{
printf("%d ",lq->front->Next->data);
lq->front=lq->front->Next;
}
lq->front=p;
putchar(10);
return 0;
}

int main(void)
{
lq_t * lq1;
lq1=linkqueue_creat();
linkqueue_in(lq1,100);
linkqueue_in(lq1,200);
linkqueue_in(lq1,300);
linkqueue_in(lq1,400);
linkqueue_in(lq1,500);
linkqueue_show(lq1);
//printf("lq->count=%d.\n",lq1->count);
/*printf("out data is %d.\n",linkqueue_out(lq1));
printf("out data is %d.\n",linkqueue_out(lq1));
printf("out data is %d.\n",linkqueue_out(lq1));
printf("out data is %d.\n",linkqueue_out(lq1));
printf("out data is %d.\n",linkqueue_out(lq1));
printf("out data is %d.\n",linkqueue_out(lq1));*/
linkqueue_outall(lq1);

linkqueue_in(lq1,500);
linkqueue_show(lq1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 数据结构