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;
}