这是今天最后一个数据结构了,这几天学下来感觉这个还是挺难的。
数据结构是各种语言的核心,练的的内在,而内功是最不能速成的,以后一定要不断琢磨。
头文件
#ifndef __LINKQUEUE_H__
#define __LINKQUEUE_H__
#define FALSE 0
#define TRUE 1
typedef 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;
}