链式队列的实现(头文件及源程序)

  • 时间:
  • 浏览:
  • 来源:互联网

链式队列的实现(头文件及源程序)

Linkedqueue.h

#ifndef __LINKEDQUEUE_H__
#define __LINKEDQUEUE_H__

//元素类型定义
typedef int ElemType_Queue;

//结点结构体类型定义
typedef struct Node_Queue
{
    ElemType_Queue data;
    struct Node_Queue *next;

}Node_Queue;

//链表类型定义
typedef struct Linkedqueue
{
    int num;
    Node_Queue *rear;
    Node_Queue *front;
}Linkedqueue;

//链表初始化
Linkedqueue *Init_Linkedqueue();

//创建一个新结点
Node_Queue *Create_New_Node_Queue(ElemType_Queue value);

//入队
void push_Queue(Linkedqueue *linkedqueue, ElemType_Queue value);

//出队
void pop_Queue(Linkedqueue *linkedqueue);

//获取队头
ElemType_Queue get_QueueHead(Linkedqueue *linkedqueue);

//判断是否空队
int empty_Queue(Linkedqueue *linkedqueue);

//销毁一个队列
//ForwardListHead *destroy_ForwardListHead(ForwardListHead *forwardlisthead);

void destroy_Queue(Linkedqueue *linkedqueue);


//获取队列长度
int length_Queue(Linkedqueue *linkedqueue);


#endif

Linkedqueue.c

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

//队列初始化
Linkedqueue *Init_Linkedqueue()
{
    Linkedqueue *linkedqueue = malloc(sizeof(Linkedqueue));
    linkedqueue->num = 0;
    linkedqueue->rear = NULL;
    linkedqueue->front = NULL;

    return linkedqueue;
}

//创建一个新结点
Node_Queue *Create_New_Node_Queue(ElemType_Queue value)
{
    Node_Queue *new_node = malloc(sizeof(Node_Queue));
    new_node->data = value;
    new_node->next = NULL;

    return new_node;
}

//入队
void push_Queue(Linkedqueue *linkedqueue, ElemType_Queue value)
{
    if (linkedqueue == NULL)
    {
        printf("队列不存在!\n");
        return;
    }
    
    Node_Queue *new_node = Create_New_Node_Queue(value);

    if (linkedqueue->num == 0)
    {
        linkedqueue->rear = new_node;
        linkedqueue->front = new_node;
    }
    else
    {
        linkedqueue->rear->next = new_node;
        linkedqueue->rear = new_node;
    }
    linkedqueue->num++;
}

//出队
void pop_Queue(Linkedqueue *linkedqueue)
{
    if (linkedqueue == NULL)
    {
        printf("队列不存在!\n");
        return;
    }

    Node_Queue *p = linkedqueue->front;

    linkedqueue->front = p->next;
    free(p);
   // p->next = NULL;
    

    linkedqueue->num--;
}



//销毁一个队列
void destroy_Queue(Linkedqueue *linkedqueue)
{
    if (linkedqueue == NULL)
    {
        printf("队列不存在!\n");
        return;
    }
    else
    {
        while (linkedqueue->num != 0)
        {
            pop_Queue(linkedqueue);
        }
        //free(linkedqueue);
		linkedqueue = NULL;
    }
}

//获取队头
ElemType_Queue get_QueueHead(Linkedqueue *linkedqueue)
{
	if (linkedqueue == NULL)
    {
        printf("队列不存在!\n");
        return -1;
    }

	if (linkedqueue->num == 0)
	{
		printf("队已空,获取队头元素失败!");
		return 0;
	}
	else
	{
		return linkedqueue->front->data;
	}
}

//获取队列长度
int length_Queue(Linkedqueue *linkedqueue)
{
    if (linkedqueue == NULL)
    {
        printf("队列不存在!\n");
        return 0;
    }

    return linkedqueue->num;
}

//判断是否空队
int empty_Queue(Linkedqueue *linkedqueue)
{
	if (linkedqueue == NULL)
    {
        return -1;//队列不存在
    }

    if (linkedqueue->num == 0)
    {
    	return 1;	//队空
    }
    else
    {
    	return 0;	//队非空
    }
}

本文链接http://metronic.net.cn/metronic/show-22193.html