队列简要实现,是queue,不是dequeue

#ifndef MYQUEUE_H
#define MYQUEUE_H
struct Node
{
	int data;
	Node *next;

};

class LUqueue
{
public:
	LUqueue();
	~LUqueue();
	void Push(int data);
	int  Top();
	void Pop();
private:
	void Insert(Node * curr, int data);
	void Erase(Node *curr);
	Node *head;
	Node *tail;
};
#endif

头文件Myqueue.h


定义Myqueue.cpp

#include "Myqueue.h"

LUqueue::LUqueue()
{
	tail=(head = new Node);
	head->next = nullptr;
}

LUqueue::~LUqueue()
{
	delete head;
	head = nullptr;
	tail = nullptr;
}

void LUqueue::Insert(Node * curr, int dat)
{
	Node *p = new Node;
	p->data = dat;
	curr->next = p;
	p->next = nullptr;
	tail = p;
}

void LUqueue::Erase(Node *curr)
{
	Node *p = new Node;
	p = curr->next->next;
	delete curr->next;
	curr->next = p;
}

void LUqueue::Push(int data)
{
	Insert(tail,data);
}

void LUqueue::Pop()
{
	Erase(head);
}

int LUqueue::Top()
{
	return head->next->data;
}

测试

#include"Myqueue.h"
#include <iostream>

int main()
{
	LUqueue que;
	que.Push(5);
	que.Push(7);
	que.Push(8);
	que.Push(9);
	std::cout << que.Top() << std::endl;
	std::cout << que.Top() << std::endl;
	que.Pop();
	std::cout << que.Top() << std::endl;
	que.Pop();
	std::cout << que.Top() << std::endl;
	que.Pop();
	std::cout << que.Top() << std::endl;
	que.Pop();
	//std::cout << que.Top() << std::endl;
	system("pause");
	return 0;
}


队列是一种先进先出(First In First Out, FIFO)的数据结构,在C语言中通常通过数组或链表来实现。这里简要介绍基于数组的队列操作: 1. **初始化**: - 创建一个固定大小的数组作为队列,并设置两个指针,front表示队首元素的索引,rear表示队尾元素的下一个位置。 2. **入队** (enqueue): - 当队列未满(rear < 数组长度)时,将新元素存放在 rear 索引处,然后 rear 自增。 3. **出队** (dequeue): - 如果队列非空(front != rear),则返回 front 索引处的元素,然后 front 自增,表示移除该元素。 - 如果队列已满且需要出队,说明队列为空,此时通常返回一个特殊的标志值或者抛出异常。 4. **查看队列是否为空/满**: - 队列为空:front == rear - 队列已满:front + 1 == rear 5. **获取队列大小**: - 如果队列中有元素:数组长度 - (front - rear) - 否则:0 6. **遍历队列**: 使用循环从 front 到 rear 指针依次访问每个元素。 以下是基于数组的简单C语言队列结构体和部分函数的示例: ```c #include <stdio.h> #define MAX_SIZE 10 typedef struct { int data[MAX_SIZE]; int front; // 队首 int rear; // 队尾 } Queue; // 初始化队列 void initQueue(Queue *q) { q->front = q->rear = 0; } // 入队 void enqueue(Queue *q, int value) { if ((q->rear + 1) % MAX_SIZE == q->front) { printf("Queue is full!\n"); } else { q->data[q->rear] = value; q->rear = (q->rear + 1) % MAX_SIZE; } } // 出队 int dequeue(Queue *q) { if (q->front == q->rear) { return -1; // 或者其他特殊值表示队列为空 } else { int value = q->data[q->front]; q->front = (q->front + 1) % MAX_SIZE; return value; } } // 主函数演示操作 int main() { Queue queue; initQueue(&queue); // ... 进行入队、出队等操作 return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值