C语言实现链队列

/*
 * link_queue.h
 *
 *  Created on: 2011-9-5
 *      Author: liusheng
 */

#ifndef LINK_QUEUE_H_
#define LINK_QUEUE_H_

#define ElemType int
#define TRUE 1
#define FALSE 0

//队列节点的组成部分
typedef struct node{
	ElemType elem;
	struct node *next;
}node,*queueprt;


typedef struct {
	queueprt font;
	queueprt rear;
}linkqueue;

//初始化队列
int initlinkqueue(linkqueue *lq) {
	lq->font = (node *)malloc(sizeof(node));
	if(lq->font == NULL) return FALSE;
    lq->rear = lq->font;
    lq->font->next = NULL;
    return TRUE;
}

//向队尾添加数据
int addnodetail(linkqueue *lq,ElemType e) {
    node *temp;
    temp = (node *)malloc(sizeof(node));
    if(temp == NULL) return FALSE;
    lq->rear->next = temp;
    lq->rear = temp;
    lq->rear->elem = e;
    lq->rear->next = NULL;
    return TRUE;
}
//得到队列的队头
int getfontnode(linkqueue *lq,ElemType *e) {
    if(lq->font->next == NULL) return FALSE;
    *e = lq->font->next->elem;
    return TRUE;
}
//删除队头的数据,并通过e得到删除过的数据的值
int deletefontnode(linkqueue *lq,ElemType *e) {
	node *temp;
	if(lq->font->next == NULL) return FALSE;
	if(lq->font->next != lq->rear) {
		temp = lq->font->next;
		lq->font->next = temp->next;
	    *e = temp->elem;
	} else {
		*e = lq->rear->elem;
		lq->rear = lq->font;
		lq->font->next = NULL;
	}
	return TRUE;
}
//输出队列中的所有节点
void printflinkqueue(linkqueue *lq) {
	node *temp;
	temp = lq->font->next;
	while(temp != NULL) {
		printf("elem = %d ",temp->elem);
		temp = temp->next;
	}
	printf("\n");
}
#endif /* LINK_QUEUE_H_ */


/*
 * linkqueue.c
 *  对link_queue.h测试
 *  Created on: 2011-9-5
 *      Author: liusheng
 */

#include <stdio.h>
#include <stdlib.h>
#include "link_queue.h"

int main(void) {
    linkqueue lq;
    initlinkqueue(&lq);
    //测试入对
    addnodetail(&lq,1);
    addnodetail(&lq,6);
    addnodetail(&lq,4);
    addnodetail(&lq,4);
    addnodetail(&lq,8);
    printflinkqueue(&lq);
    ElemType e;
    addnodetail(&lq,12);
    //测试出队
    deletefontnode(&lq,&e);
    printf("e = %d\n",e);
    //测试得到队头数据
    getfontnode(&lq,&e);
    printf("e = %d\n",e);
    printflinkqueue(&lq);
	return 0;
}

//以下是控制台的输出数据
elem = 1 elem = 6 elem = 4 elem = 4 elem = 8 
e = 1
e = 6
elem = 6 elem = 4 elem = 4 elem = 8 elem = 12 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值