数据结构:链表队列

来源:互联网 发布:面向对象编程的优势 编辑:程序博客网 时间:2024/05/26 02:18

这是今天最后一个数据结构了,这几天学下来感觉这个还是挺难的。

数据结构是各种语言的核心,练的的内在,而内功是最不能速成的,以后一定要不断琢磨。

头文件

#ifndef __LINKQUEUE_H__#define __LINKQUEUE_H__#define FALSE 0#define TRUE 1typedef int QUEUEDATA;typedef struct _node{QUEUEDATA data;struct _node *next;}NODE;typedef struct _queue{struct _node *front;struct _node *rear;}QUEUE;//创建链表队列QUEUE * Crate_queue();//清空队列int QueueEmpty(QUEUE *q);//进队int PushQueue(QUEUE *q,QUEUEDATA x);//出队(出队是从front开始的)int PopQueue(QUEUE *q,QUEUEDATA *x);//获取队列头int GetQueue(QUEUE *q,QUEUEDATA *x);//删除队列int DelQueue(QUEUE *q);#endif
实现函数

#include<stdio.h>#include<stdlib.h>#include"LinkQueue.h"#include"error.h"//创建链表队列QUEUE * Crate_queue(){QUEUE *q = (QUEUE *)malloc(sizeof(QUEUE *)/sizeof(char));if (q == NULL){errno == MALLOC_ERROR;return NULL;}return q;}//清空队列int QueueEmpty(QUEUE *q){if (q == NULL){errno == ERROR;return FALSE;}q->front = NULL;q->rear= NULL;return TRUE;}//进队(链表的队列是从rear开始的)int PushQueue(QUEUE *q,QUEUEDATA x){if (q == NULL){errno == ERROR;return FALSE;}NODE * node = (NODE *)malloc(sizeof(NODE *)/sizeof(char));if (node == NULL){errno == ERROR;return FALSE;}node->data = x;node->next = NULL;//判断是否空栈if ( q->front == NULL){q->front = node;q->rear = node;}else {q->rear->next = node;q->rear = node;}return TRUE;}//出队(出队是从front开始的)int PopQueue(QUEUE *q,QUEUEDATA *x){if (q == NULL){errno == ERROR;return FALSE;}//判断是否空栈if ( q->front == NULL){errno = QUEUE_EMPTY;return FALSE;}if (q->front->next == NULL){*x = q->rear->data;free(q->front);q->front = NULL;q->rear = NULL;}else {*x = q->front->data;NODE * p = q->front->next;free(q->front);q->front = p;}return TRUE;}//获取队列头int GetQueue(QUEUE *q,QUEUEDATA *x){if (q == NULL){errno == ERROR;return FALSE;}//判断是否空栈if ( q->front == NULL){errno = QUEUE_EMPTY;return FALSE;}*x = q->front->data;return TRUE;}//删除队列int DelQueue(QUEUE *q){if (q == NULL){errno == ERROR;return FALSE;}int x;while(q->front){PopQueue(q,&x);}free(q);return TRUE;}