1. 程式人生 > >【資料結構作業】佇列

【資料結構作業】佇列

#include <iostream>
#include <queue> 
using namespace std;

class LinkQueue;				//連佇列前視說明

class LinkQueueNode
{
	friend class LinkQueue;		
public:
	LinkQueueNode(int &e, LinkQueueNode *p = NULL):elem(e), next(p){};			//節點類的建構函式
private:
	int elem;									//資料域
	LinkQueueNode *next;					//指標域	
};

class LinkQueue
{
public:
	LinkQueue():front(NULL), rear(NULL){};			//構造一個空佇列
	~LinkQueue();								//解構函式,銷燬佇列
	int IsEmpty() const 						//判斷是否為空
	{
		return front == NULL;	
	}
	void LinkQueueClear();						//請空鏈佇列
	int LinkQueueLength() const;				//求鏈佇列長度
	int Getfront();								//返回鏈頭元素值
	void InQueue(int &e);						//入隊
	int OutQueue();								//出隊,並返回值
private:
	LinkQueueNode *front, *rear;				//定義隊頭隊尾指標
};

LinkQueue::~LinkQueue()			
{
	LinkQueueNode *p;
	while(front != NULL)			
	{
		p = front;
		front = front->next;
		delete p;
	}
}

int LinkQueue::LinkQueueLength() const
{
	LinkQueueNode *p = front;
	int i = 0;
	while(p)
	{
		i++;
		p = p->next;
	}
	return i;
}

int LinkQueue::Getfront()
{
	if(IsEmpty())
	{
		cout << "The Queue is Empty!" << endl;
		exit(0);									
	}
	else
		return front->elem;
}

void LinkQueue::InQueue(int &e)
{
	if(front == NULL)
		front = rear = new LinkQueueNode (e, NULL);			
	else
		rear = rear->next = new LinkQueueNode(e, NULL);
}

int LinkQueue::OutQueue()
{
	if(IsEmpty())
	{
		cout << "The Queue is Empty!" << endl;
		exit(0);					
	}
	LinkQueueNode *p = front;
	int e = p->elem;
	front = front->next;
	if(front == NULL)
		rear = NULL;
		delete p;
		return e;
}

int main()
{
	int n, m;
	cin >> n >> m;
	LinkQueue Q; 
	for(int i = 0; i < n; i++)
	{
		Q.InQueue(i);
	}
	for (int j = 0; j < m; j++)
	{
		Q.OutQueue(); 
	} 
	int a = Q.Getfront();
	int b = Q.LinkQueueLength();
	cout << a << " " << b << endl;
	Q.~LinkQueue();
	return 0;
}


相關推薦

資料結構作業佇列

#include <iostream> #include <queue> using namespace std; class LinkQueue; //連佇列前視說明 class LinkQueueNode { friend clas

資料結構---佇列

佇列簡介 佇列的特點 佇列(Queue)是隻允許在一端進行插入,而在另一端進行刪除的運算受限的線性表。 (1)允許刪除的一端稱為隊頭(Front)。 (2)允許插入的一端稱為隊尾(Rear)。 (3)當佇列中沒有元素時稱為空佇列。 (

資料結構作業利用棧(以順序棧作儲存結構)實現二、十和十六進位制轉換

#include <iostream> #define MAXSIZE 100 using namespace std; typedef int SElemType; typedef struct { SElemType *base; SElemType

資料結構作業以鄰接表作儲存結構,廣度遍歷圖的優先搜尋序列

#include <iostream> #define MVNum 100 #define MAXQSIZE 100 using namespace std; typedef char ElemType; typedef int QElemType; typed

資料結構--Heap

堆(英語:Heap)是電腦科學中的一種特別的樹狀資料結構。若是滿足以下特性,即可稱為堆:“給定堆中任意節點 P 和 C,若 P 是 C 的母節點,那麼 P 的值會小於等於(或大於等於) C 的值”。若母節點的值恆小於等於子節點的值,此堆稱為最小堆(英語:min heap);反之,若母節點的值

資料結構排序POJ1804——歸併排序求逆序數

問題描述: 給定一個數組,問最少經過多少次交換,才可以使得它有序 求解方法: 實際上就是求該陣列的逆序數,使用歸併排序即可 AC程式碼如下: #include<cstdio> #in

資料結構查詢POJ1840——求五元三次方程的整數解個數

問題描述: 給定五元三次方程的全部係數,求出解不等於0且為[−50,50][-50,50][−50,50]之間的整數的個數。 求解方法: 將後兩項移到等式的右邊,並將前三項的全部結果遍歷出來並打表

資料結構查詢POJ2002——判斷座標點組成正方形的個數

問題描述: 給定二維座標軸上面的座標點,求出它們一共可以組成多少個正方形 求解方法: 將他們按照橫座標由小到大排列(相等則按照縱座標排列),然後遍歷取出其中的兩個點,根據兩個點縱座標的大小關係和兩

資料結構01緒論-考研程式碼書寫規範與語言基礎

決定將一些內容敲成部落格以供自己複習和使用 僅供參考。 ///////////////////////////////////////////////////////////////////////

資料結構筆記哈夫曼樹的構造演算法

原教材《資料結構教程》(第5版)李春葆 主編(武漢大學資料結構課程教材) 《演算法筆記》那本書上並沒有直接給出哈夫曼樹的構造程式碼,特此記錄一下。 核心程式碼: typedef struct{

資料結構作業9—佇列(選擇題)

2-1若已知一佇列用單向連結串列表示,該單向連結串列的當前狀態(含3個物件)是:1->2->3,其中x->y表示x的下一節點是y。此時,如果將物件4入隊,然後佇列頭的物件出隊,則單向連結串列的狀態是: (1分) A.答案不唯一 B.2->3-&g

資料結構作業9—佇列(判斷題)

1-1所謂“迴圈佇列”是指用單向迴圈連結串列或者迴圈陣列表示的佇列。 (1分) T F 作者: DS課程組 單位: 浙江大學 1-2不論是入佇列操作還是入棧操作,在順序儲存結構上都需要考慮"溢位"情況。 (2分) T F

資料結構筆記Leetcode買賣股票的最佳時機 系列總結

121.買賣股票的最佳時機 給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 如果你最多隻允許完成一筆交易(即買入和賣出一支股票),設計一個演算法來計算你所能獲取的最大利潤。 注意你不能在買入股票前賣出股票。 示例 1: 輸入: [7

資料結構基礎雙向約瑟夫問題

  約瑟夫問題是一個經典的問題,我們不妨將這個經典問題進行擴充套件,變成一個雙向的約瑟夫問題。   已知 n 個人(不妨分別以編號 1,2,3,...,n 代表 )圍坐在一張圓桌周圍,首先從編號為 k 的人從 1 開始順時針報數,1, 2, 3, ...,記下順時針數到 m 的那個人,同時從編號為 k 的人

資料結構演算法約瑟夫環問題(線性表)

據說著名猶太曆史學家 Josephus有過以下的故事:在羅馬人佔領喬塔帕特後,39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了一個自殺方式,41個人排成一個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下一個重新報數,直到所有人都自殺

資料結構基礎哈夫曼編碼/譯碼課程設計

#include<stdio.h> #include<stdlib.h> #include<string.h> #define N 20 typedef struct { char ch; int wei

資料結構演算法如何使用棧計算字尾表示式

無聊寫的一個使用棧計算字尾表示式的程式碼: 初次寫,只有+-*/四個運算子,後面可以自己加,都差不多就是個算術運算子優先順序的問題。 主函式:包括初始化*+-/符號,判斷輸入的字元是運算元還是運算子。 /** * !!!!!(棧相關測試) * @author WZ

資料結構筆記三、樹與二叉樹

課程是中國大學MOOC浙江大學出的資料結構。 作為一個數據結構愛好者,我覺得很有必要稍微整理下各章節的筆記,對知識進行梳理。 查詢 首先,老師從“查詢”入手,查詢分為靜態和動態,演示了靜態查詢的例程,並介紹了‘建立哨兵’的思想。而這個例程使用的是普通的順序

資料結構專題線性表之單鏈表

 對比了好幾本書,比較少涉及單鏈表的賦值,為了親自跑出其他功能,花了不少時間,畢竟是打基礎嘛,相信以後會越來熟練(你為什麼那麼熟練,明明是我先~)話不多說,下面是程式碼及實驗結果。   #include <cstdio> #include

資料結構05紅-黑樹基礎----二叉搜尋樹(Binary Search Tree)

目錄 1、二分法引言 2、二叉搜尋樹定義 3、二叉搜尋樹的CRUD 4、二叉搜尋樹的兩種極端情況 5、二叉搜尋樹總結 前言 在【演算法04】樹與二叉樹中,已經介紹