首页 > 其他 > 详细

数据结构---队列

时间:2021-05-03 14:56:19      阅读:13      评论:0      收藏:0      [点我收藏+]

以下内容只是学习记录:

一、定义

  队列是一种先进先出的线性表。在表的一端进行插入(队尾),另一端删除元素(对头)实现形式有:顺序队列(顺序表实现)和链式队列(链式表实现)

 

二、代码编写

   结构体定义及功能函数声明:

#ifndef __LINKQUEUE_H__
#define __LINKQUEUE_H__

#include <stdio.h>
#include "malloc.h"
#include "assert.h"

#define ElemType int
typedef struct QueueNode
{
	ElemType data;
	struct QueueNode *next;
}QueueNode;

typedef struct LinkQueue
{
	QueueNode *front;
	QueueNode *tail;
}LinkQueue;

void InitQueue(LinkQueue *p);
void EnQueue(LinkQueue *p, ElemType x);
void ShowQueue(LinkQueue *p);
void DeQueue(LinkQueue *p);
void GetHead(LinkQueue *p, ElemType *v);
int Length(LinkQueue *p);
void ClearQueue(LinkQueue *p);
void DestroyQueue(LinkQueue *p);
#endif

  功能函数编写:

#include "LinkQueue.h"

void InitQueue(LinkQueue *p)
{
	QueueNode *s = (QueueNode *)malloc(sizeof(QueueNode));
	s->data = 0;
	assert(s != NULL);
	p->front = p->tail = s;
	p->tail->next = NULL;

}

void EnQueue(LinkQueue *p, ElemType x)
{
	QueueNode *s = (QueueNode *)malloc(sizeof(QueueNode));
	assert(s != NULL);
	s->data = x;
	s->next = NULL;
	p->tail->next = s;
	p->tail = s;
	p->front->data++;
}

void ShowQueue(LinkQueue *p)
{
	QueueNode *s = p->front->next;
	printf("Front->");
	while (s != NULL)
	{
		printf("%d->", s->data);
		s = s->next;
	}
	printf("Tail\n");
}

void DeQueue(LinkQueue *p)
{
	if (p->front == p->tail)
		return;
	QueueNode *s = p->front->next;
	p->front->next = s->next; 
	free(s);
	s = NULL;
	if (p->front->next == NULL)
		p->tail = p->front;
	p->front->data--;
}

void GetHead(LinkQueue *p, ElemType *v)
{
	if (p->front == p->tail)
		return;
	QueueNode *s = p->front->next;
	*v = s->data;
}

int Length(LinkQueue *p)
{
	return p->front->data;
}

void ClearQueue(LinkQueue *p)
{
	if (p->front == p->tail)
		return;
	QueueNode *s = p->front->next;
	while (s != NULL)
	{
		p->front->next = s->next;
		free(s);
		s = p->front->next;
	}
	p->tail = p->front;
	p->front->data = 0;
	
}

void DestroyQueue(LinkQueue *p)
{
	ClearQueue(p);
	free(p->front);
	p->tail = p->front = NULL;
}

  Main函数编写:

#include "LinkQueue.h"

void main()
{
	LinkQueue Q;
	InitQueue(&Q);
	ElemType elem;
	for (int i = 1; i <= 10; ++i)
	{
		EnQueue(&Q, i);
	}
	ShowQueue(&Q);
	DeQueue(&Q);
	ShowQueue(&Q);
	GetHead(&Q, &elem);
	printf("队头元素:%d\n", elem);
	ClearQueue(&Q);
	int len = Length(&Q);
	printf("队列长度为:%d", len);
}

  

数据结构---队列

原文:https://www.cnblogs.com/jacklovezzz/p/14724889.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!