C++ 链队列的实现

C++ 链队列的实现!定义qnode时候,模板和typedef不能同时使用



//IQueue.h
#pragma once
#include <iostream>
using namespace std;

template<typename T>
struct qnode                 //typedef和模板不能一起用
{
	T data;
	struct qnode *next;
} ;

template<typename T>
class IQueue
{
public:
	IQueue(void);
	~IQueue(void);

public:
	bool isEmpty(); //return true id the queue is empty
	T front(); //return data of the first node 
	T get(int i);//return data of num i node
	void push(const T &x); //add x to the tail of queue
	T pop(); //return and delete the first node in the queue	
	bool clear(); //delete all nodes in queue

private:
	qnode<T> *head;
	qnode<T> *tail;
};

template<typename T>
IQueue<T>::IQueue()
{
	qnode<T> *tmp = new qnode<T>;
	tmp->data = NULL;
	tmp->next = NULL;
	head = tmp;
	tail = tmp;
}

template<typename T>
IQueue<T>::~IQueue()
{
	delete head;
	delete tail;
}

template<typename T>
bool IQueue<T>::isEmpty()
{
	return head==tail;
}

template<typename T>
T IQueue<T>::front()
{
	if(isEmpty())
		return NULL;
	return head->next->data;
}

template<typename T>
T IQueue<T>::get(int i)
{
	int num = 0;
	qnode<T> *p;
	p = head;
	while(p->next!=NULL&&num!=i)
	{
		p=p->next;
		num++;
	}

	if(p->next==NULL&&num!=i)
		return NULL;
	if(num!=i)
		return NULL;

	return p->data;
}

template<typename T>
void IQueue<T>::push(const T &x)
{
	qnode<T> *tmp = new qnode<T>;
	tmp->data = key;
	tmp->next = NULL;
	tail->next = tmp;
	tail = tmp;
}

template<typename T>
T IQueue<T>::pop()
{
	if(isEmpty())
		return NULL;
	qnode<T> *p = head;
	head = head->next;
	delete p;
}

template<typename T>
bool IQueue<T>::clear()
{
	if(isEmpty())
		return true;
	qnode<T> *p;
	p = head;
	while(p->next!=NULL)
	{
		head->next = p->next;
		delete p;
		p = head;
	}
	tail = head;
	return true;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++链队列是一种基于链表实现的队列数据结构,它具有先进先出(FIFO)的特性。链队列使用链表来存储数据元素,并通过头指针和尾指针来标记队列的头部和尾部。 杨辉三角是一个数学上的三角形数表,它以二项式系数为元素,每个数等于它上方两数之和。杨辉三角的第n行有n个数,第n行的第k个数可以表示为C(n-1, k-1),其中C是组合数。 以下是C++链队列实现杨辉三角的示例代码: ```cpp #include <iostream> using namespace std; // 定义链表节点 struct Node { int data; Node* next; }; // 定义链队列 struct Queue { Node* front; Node* rear; }; // 初始化队列 void initQueue(Queue& q) { q.front = q.rear = nullptr; } // 判断队列是否为空 bool isEmpty(Queue& q) { return q.front == nullptr; } // 入队操作 void enqueue(Queue& q, int value) { Node* newNode = new Node; newNode->data = value; newNode->next = nullptr; if (isEmpty(q)) { q.front = q.rear = newNode; } else { q.rear->next = newNode; q.rear = newNode; } } // 出队操作 int dequeue(Queue& q) { if (isEmpty(q)) { cout << "Queue is empty! << endl; return -1; } Node* temp = q.front; int value = temp->data; q.front = q.front->next; delete temp; if (q.front == nullptr) { q.rear = nullptr; } return value; } // 打印杨辉三角 void printYanghuiTriangle(int n) { Queue q; initQueue(q); // 第一行 enqueue(q, 1); for (int i = 0; i < n; i++) { int prev = 0; for (int j = 0; j <= i; j++) { int curr = dequeue(q); cout << curr << " "; // 计算下一行的值并入队 int next = prev + curr; enqueue(q, next); prev = curr; } cout << endl; } } int main() { int n; cout << "请输入要打印的杨辉三角的行数:"; cin >> n; printYanghuiTriangle(n); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值