自学内容网 自学内容网

数据结构系列-队列的结构和队列的实现

🌈个人主页:羽晨同学 

💫个人格言:“成为自己未来的主人~”  

队列

队列的概念及结构

队列:只允许在一端进行插入数据操作,在另一端进行删除删除数据操作的特殊线性表,队列具有先进先出FIFO,进行插入操作的一端称为队尾,进行删除操作的一端称为队头

队列的实现

队列也可以数组和链表的结构实现,使用链表的结构实现更优一点,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低

#pragma once
#include<stdio.h>
#include<stdbool.h>
#include<assert.h>

typedef int QDataType;
typedef struct QueueNode
{
int val;
struct QueueNode* next;
}QNode;

typedef struct Queue
{
QNode* phead;
QNode* ptail;
int size;
}Queue;

void QueueInit(Queue* pq);
void QueueDestroy(Queue* pq);
//入队列
void QueuePush(Queue* pq, QDataType x);
//出队列
void QueuePop(Queue* pq);

QDataType QueueFront(Queue*pq);
QDataType QueueBack(Queue* pq);
bool QueueEmpth(Queue* pq);
int QueueSize(Queue* pq);
#define _CRT_SECURE_NO_WARNINGS
#include"code.4.5.Queue.h"
void QueueInit(Queue* pq) {
assert(pq);

pq->phead = NULL;
pq->ptail = NULL;
pq->size = 0;
}

void QueueDestroy(Queue* pq)
{
assert(pq);

QNode* cur = pq->phead;
while (cur) {
QNode* next = cur->next;
free(cur);
cur = next;
}
pq->phead = pq->ptail = NULL;
pq->size = 0;
}

//入队列
void QueuePush(Queue* pq, QDataType x) {
assert(pq);
QNode* newnode = (QNode*)malloc(sizeof(QNode));
if (newnode == NULL) {
perror("malloc fail");
return;
}
newnode->val = x;
newnode->next = NULL;
if(pq->ptail)
{
pq->ptail->next = newnode;
pq->ptail = newnode;
}
pq->size++;
}
void QueuePop(Queue* pq)
{
assert(pq);

assert(pq->phead != NULL);
if (pq->phead->next == NULL) {
free(pq->phead);
pq->phead = pq->ptail = NULL;
}
else
{
QNode* next = pq->phead->next;
free(pq->phead);
pq->phead = next;
}
pq->size--;
}

QDataType QueueFront(Queue* pq) {
assert(pq);
assert(pq->phead != NULL);
return pq->phead->val;
}
QDataType QueueBack(Queue* pq) {
assert(pq);
assert(pq->ptail != NULL);
return pq->ptail->val;
}
bool QueueEmpth(Queue* pq)
{
assert(pq);
return pq->size == 0;
}
int QueueSize(Queue* pq)
{
assert(pq);
return pq->size;
}

#define _CRT_SECURE_NO_WARNINGS
#include"code.4.5.stack.h"
//int main() {
//ST s;
//STInit(&s);
//STPush(&s,1);
//STPush(&s,2);
//STPush(&s,3);
//int top = STTop(&s);
//printf("%d", top);
//
//STDestroy(&s);
//return 0;
//}
#include"code.4.5.Queue.h"
int main()
{
Queue q;
QueueInit(&q);
QueuePush(&q, 1);
QueuePush(&q, 2);

printf("%d ", QueueFront(&q));
QueuePop(&q);

QueuePush(&q, 3);
QueuePush(&q, 4);

while (!QueueEmpth(&q))
{
printf("%d ", QueueFront(&q));
QueuePop(&q);
}

QueueDestroy(&q);

return 0;
}


原文地址:https://blog.csdn.net/in_seattle/article/details/137403042

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!