头文件
cpp
#pragma once
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
using namespace std;
typedef struct listqueuehead {
struct node* front;//头
struct node* rear;//尾
}listqueuehead, * plistqueue;
//链式队列有效节点设计
typedef struct node {
int data;//数据域
struct node* next;//指针域
}node, * pnode;
//初始化
void initlistqueue(listqueuehead* p);
//入队
bool push(listqueuehead* p, int val);
//出队
bool pop(listqueuehead* p);
//判空
bool isempty(listqueuehead* p);
//清空
void clear(listqueuehead* p);
//销毁
void destroy(listqueuehead* p);
//打印
void show(listqueuehead* p);
//获取有效值个数
int getsize(listqueuehead* p);
//获取队头元素值
int gettop(listqueuehead* p);
源文件
cpp
#include"链式队列.h"
//初始化
void initlistqueue(listqueuehead* p) {
assert(p != nullptr);
p->front = p->rear = nullptr;
}
//入队
bool push(listqueuehead* p, int val) {
assert(p != nullptr);
node* k = (node*)malloc(sizeof(node));
if (k == nullptr)return false;
k->data = val;
k->next = nullptr;
if (isempty(p)) {
p->front = k;
p->rear = k;
}
else {
p->rear->next = k;
p->rear = k;
}
return true;
}
//出队
bool pop(listqueuehead* p) {
assert(p != nullptr);
if (isempty(p))return false;
node* temp = p->front;
if (p->front == p->rear) {
p->front = NULL;
p->rear = NULL;
}
else p->front = p->front->next;
free(temp);
temp = NULL;
return true;
}
//判空
bool isempty(listqueuehead* p) {
assert(p != nullptr);
return p->front == nullptr;
}
//清空
void clear(listqueuehead* p) {
assert(p != nullptr);
if (isempty(p))return;
while (p->front != NULL) {
pnode temp = p->front;
p->front = p->front->next;
free(temp);
temp = NULL;
}
p->rear = NULL;
}
//销毁
void destroy(listqueuehead* p) {
assert(p != nullptr);
clear(p);
}
//打印
void show(listqueuehead* p) {
assert(p != nullptr);
printf("队列元素: ");
pnode cur = p->front;
while (cur != NULL) {
cout << cur->data << " ";
cur = cur->next;
}cout << endl;
}
//获取有效值个数
int getsize(listqueuehead* p) {
assert(p != nullptr);
if (isempty(p))return -1;
int count = 0;
pnode cur = p->front;
while (cur != nullptr) {
count++;
cur = cur->next;
}
return count;
}
//获取队头元素值
int gettop(listqueuehead* p) {
assert(p != nullptr);
if (isempty(p))return -1;
return p->front->data;
}
int main() {
return 0;
}