C语言实现链队列
来源:互联网 发布:中国房地产泡沫知乎 编辑:程序博客网 时间:2024/05/22 16:48
/* * 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 = 1e = 6elem = 6 elem = 4 elem = 4 elem = 8 elem = 12