思路:
这里用前面的传统链表创建方式,队列先进先出,以头结点进队列,未结点出去。
代码实现:
头文件.h
#pragma once
#include <iostream>
using namespace std;
//这里运用传统链表进行
typedef struct SNode {
int data;
struct SNode* next;
}Snode;
typedef struct Link_Queue {
Snode* head;
int size;
}lqueue;
//创建初始化
lqueue* init_lque();
//增加
void push_lque(lqueue* lque,int value);
//删除
void pop_lque(lqueue* lque);
//返回头部元素
int last_lque(lqueue* lque);
//返回大小
int Size_lque(lqueue* lque);
//催回内存
void free_lque(lqueue* lque);
.cpp文件
#include "link_Queue.h"
lqueue* init_lque()
{
lqueue* lque = (lqueue *)malloc(sizeof(lqueue));
lque->head = (Snode*)malloc(sizeof(Snode));
lque->size = 0;
lque->head->next = NULL;
lque->head->data = NULL;
return lque;
}
void push_lque(lqueue* lque,int value)
{
if (lque==NULL) {
cout<<"链表数据为空!" << endl;
}
Snode* NewNode = (Snode*)malloc(sizeof(Snode));//创建要插入的结点
NewNode->data = value;
NewNode->next = NULL;
//与链表建立关系
NewNode->next =lque->head->next;
lque->head->next = NewNode;
lque->size++;
}
void pop_lque(lqueue* lque)
{
if (lque == NULL) {
cout << "链表数据为空!" << endl;
}
//这里可写可不写
//Snode* node = lque->head->next;
//for (int i = 0; i < lque->size - 1; i++) {
// node = node->next;
//}
//node = NULL;
lque->size--;
}
//返回最后一个数据元素 即出队
int last_lque(lqueue* lque)
{
if (lque == NULL) {
cout << "链表数据为空!" << endl;
}
Snode* node = lque->head->next;//现在就是第一个元素了
for (int i = 0; i < lque->size-1;i++) {//所以size要-1
node = node->next;
}
return node->data;
}
int Size_lque(lqueue* lque)
{
return lque->size;
}
void free_lque(lqueue* lque)
{
if (lque == NULL) {
cout<<"链表数据为空!" << endl;
}
free(lque->head);
free(lque);
cout<<"链表数据已被摧毁!" << endl;
}
主函数测试
#include "link_Queue.h"
int main() {
lqueue* lque = init_lque();
push_lque(lque,6);
push_lque(lque,13);
push_lque(lque,24);
push_lque(lque,23);
push_lque(lque,2);
cout << "队列的元素个数:" << lque->size << endl;
cout<<"队列的弹出顺序:" << endl;
while (lque->size>0) {
cout << last_lque(lque) << " ";
pop_lque(lque);
}
cout << "\n出队后,队列的元素个数:" << lque->size << endl;
free_lque(lque);
return 0;
}