数据结构-实验四 循环队列的应用

2022/10/21
1、要求使用循环链表实现具有一个指向最后一个节点的myback指针的Queue类的开发。

(1)给出构造,判空、入队、出队、提取队头元素以及显示等函数成员的定义;
(2)给出析构、复制构造和赋值运算符函数;
(3)选择输出杨辉三角图形作为测试案例。

Queue.h

#pragma once
#include<iostream>
using namespace std;
typedef int type;
class Queue {
public:
	Queue();
	~Queue();
	Queue(const Queue& q);
	bool empty();
	type front();
	void enqueue(type x);
	void dequeue();
	void display(ostream& out)const;
	Queue& operator=(const Queue& q);
private:
	class node {
	public:
		type data;
		node* next;
		node() :data(0), next(0) {}
		node(type d):data(d),next(0){}
	};
	typedef node* nodepointer;
	nodepointer myfront;
	nodepointer myback;
};

Queue.cpp

#include<iostream>
#include"Queue.h"
using namespace std;
Queue::Queue() {
	myback = new node;
	myfront = myback;
	myback->next = myfront;
}
Queue::~Queue() {
	nodepointer temp = myfront->next;
	while (temp != myfront) {
		myfront->next = temp->next;
		delete temp;
		temp = myfront->next;
	}
	temp = nullptr;
	myback = myfront;
}
Queue::Queue(const Queue& q) {
	myfront = q.myfront;
	myfront->next = myback;
	nodepointer temp = q.myfront;
	while (temp != q.myback) {
		myback = temp;
		myback = myback->next;
		temp = temp->next;
	}
	myback = temp;
}
bool Queue::empty() {
	if (myfront == myback) {
		return true;
	}
	return false;
}
type Queue::front() {
	return myfront->data;
}
void Queue::enqueue(type x) {
	myback->data = x;
	myback->next = new node;
	myback = myback->next;
	myback->next = myfront;
}
void Queue::dequeue() {
	if (empty()) {
		cout << "队列为空" << endl;
		return;
	}
	myfront->data = 0;
	myfront = myfront->next;
	myback->next = myfront;
}
void Queue::display(ostream& out)const {
	nodepointer temp = myfront;
	while (temp->next != myback) {
		out << temp->data << " ";
		temp = temp->next;
	}
	out << temp->data;
}
Queue& Queue::operator=(const Queue& q) {
	myfront = q.myfront;
	myfront->next = myback;
	nodepointer temp = q.myfront;
	while (temp != q.myback) {
		myback = temp;
		myback = myback->next;
		temp = temp->next;
	}
	myback = temp;
	return *this;
}

main.cpp

#include<iostream>
#include"Queue.h"
using namespace std;
void f(int n) {
	Queue q;
	q.enqueue(1);
	q.enqueue(1);
	int s = 0;
	int t;
	for (int i = 1; i <= n; i++) {
		cout << endl;
		q.enqueue(0);
		for (int j = 1; j < i + 3; j++) {
			t = q.front();
			q.dequeue();
			q.enqueue(s + t);
			s = t;
			if (j != i + 2) {
				cout << s << " ";
			}
		}
	}
}
int main() {
	int n;
	cout << "请输入行数" << endl;
	cin >> n;
	f(n);
	return 0;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闻闻闻闻笛声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值