1. 程式人生 > >c++ 實現鏈佇列資料結構

c++ 實現鏈佇列資料結構

建立標頭檔案LinkQueue.h

#ifndef LinkQueue_h
#define LinkQueue_h

template <class DataType>
//使用結構體定義結點
struct Node{
    DataType data;
    Node<DataType> *next;  //指向下一個結點的指標
};

template <class DataType>
class LinkQueue{
public:
    LinkQueue();  //建構函式
    ~LinkQueue();  //解構函式
    void EnQueue(DataType x);  //入隊函式
    DataType DeQueue();  //出隊函式
    DataType GetQueue();  //得到隊頭元素
    int Empty();  //判斷鏈佇列是否為空
private:
    Node<DataType> *front, *rear;
};
#endif /* LinkQueue_h */

建立原始檔LinkQueue.cpp實現標頭檔案中的成員函式

#include <stdio.h>
#include "LinkQueue.h"

template <class DataType>
LinkQueue<DataType>::LinkQueue(){
    Node<DataType> *s = NULL;
    s = new Node<DataType>;
    s -> next = NULL;
    front = rear = s;
}

template <class DataType>
LinkQueue<DataType>::~LinkQueue(){
    Node<DataType> *p = NULL;
    while(front != NULL){
        p = front ->next;
        delete front;
        front = p;
    }
}

template <class DataType>
void LinkQueue<DataType>:: EnQueue(DataType x){
    Node<DataType> *s = NULL;
    s = new Node<DataType>;
    s -> data = x;
    s -> next = NULL;
    rear -> next = s;
    rear = s;
}

template <class DataType>
DataType LinkQueue<DataType>:: DeQueue(){
    Node<DataType> *p = NULL;
    int x;
    if (rear == front) throw "underflow";
    p = front->next;
    x = p->data;
    front->next = p->next;
    if (p->next == NULL) rear = front;
    delete p;
    return x;
}

template <class DataType>
DataType LinkQueue<DataType>::GetQueue(){
    return front -> next -> data;
}

template <class DataType>
int LinkQueue<DataType>::Empty(){
    if (front == rear) return 1;
    else return 0;
}

編寫主程式

#include <stdio.h>
#include <iostream>
#include "LinkQueue.cpp"
using namespace std;

int main(){
    LinkQueue<int> Q;
    if(Q.Empty()){
        cout << "Queue is empty!" << endl;
    }
    else {
        cout << "Queue is not empty!" << endl;
    }
    
    try{
        Q.EnQueue(5);
        Q.EnQueue(10);
    }
    catch(char *wrong){
        cout << wrong << endl;
    }
    
    Q.EnQueue(5);
    Q.EnQueue(10);
    
    cout << Q.GetQueue() << endl;
    
    try{
        Q.DeQueue();
    }
    catch(char *wrong){
        cout << wrong << endl;
    }
    
    cout << Q.GetQueue() << endl;
    
    return 0;
}

相關推薦

c++ 實現佇列資料結構

建立標頭檔案LinkQueue.h#ifndef LinkQueue_h #define LinkQueue_h template <class DataType> //使用結構體定義結點 struct Node{ DataType data;

三、C++實現棧(stack)資料結構

本文使用C++實現棧資料結構,棧資料結構同之前實現的vector和list資料結構一樣都屬於線性序列結構,但是棧的資料操作範圍僅限於邏輯上的特定頂端,即只能對棧頂進行操作。由於棧結構具有的簡潔性和規範性,它既為構建更復雜、更高階資料結構的基礎,也是演算法設計的基本出發點。鑑於其的基礎性及使用的頻

C++實現隊類——合肥工業大學資料結構實驗5:佇列

實驗5 5.1 實驗目的 熟練掌握佇列的順序鏈式儲存結構。 熟練掌握佇列的有關演算法設計,並在鏈佇列上實現。 根據具體給定的需求,合理設計並實現相關結構和演算法。 5.2 實驗要求 5.2.1鏈佇列實驗要求 本次實驗中的鏈佇列結構指不帶頭結點的單鏈表; 鏈佇列結構和運算定義,演算法的實現以庫檔

資料結構c語言)——佇列儲存結構實現

是佇列鴨,FIFO,先進先出! 對於帶頭節點的和不帶頭節點的鏈佇列的操作有個小小的區別: 不帶頭結點的鏈佇列在入佇列的時候,第一個元素時要先判斷是否為空,再插入。而帶頭結點不需要,操作更方便些;  我是分割線-----------------------------

C語言 佇列結構實現與表示 資料結構 佇列實現與表示

  五一放假,也沒有什麼事情可以做的,本來想出去玩一玩或者打打球什麼的,可是天公不作美,這兩天天氣一直是在下雨,弄的人的心情溼透了。  昨天學習了一天的棧和佇列,昨天在下午些的時候完成了棧的程式設計工作。晚上本應該是用來寫完佇列的程式的,可是晚上到寢室熄燈之前只是差一點程式就

資料結構實驗4:C++實現迴圈佇列

實驗4 4.1 實驗目的 熟練掌握佇列的順序儲存結構和鏈式儲存結構。 熟練掌握佇列的有關演算法設計,並在迴圈順序佇列和鏈佇列上實現。 根據具體給定的需求,合理設計並實現相關結構和演算法。 4.2 實驗要求 4.2.1 迴圈順序佇列的實驗要求 迴圈順序佇列結構和運算定義,演算法的實現以庫檔案方式實

資料結構實驗4:C++實現迴圈佇列

                                                實驗4 4.1 實驗目的 熟練掌握佇列的順序儲存結構和鏈式儲存結構。 熟練掌握佇列的有關演算法設計,並在迴圈順序佇列和鏈佇列上實現。 根據具體給定的需求,合理設計並實現

C語言實現簡單的資料結構迷宮實驗

分析:迷宮實驗主要有兩部分操作,其一是對迷宮的生成,其二是尋路使用棧的操作。 步驟: 一、.h檔案 1、首先是迷宮的生成,可以使用隨機數種子生成,但主要邏輯部分並不在此,所以在這裡直接寫死,固定下來。 定義一個座標型別的結構體,和二維陣列迷宮: typedef

C語言實現佇列的初始化&進隊&出隊

/*連結串列實現佇列的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typedef struct node { int data;

C語言實現List的資料結構(很詳細的註釋)

新建一個list.c檔案 #include <stdio.h> #include <malloc.h> //動態分配記憶體 #include <stdlib.h> //exit 函式 #include <std

C語言實現(摘自資料結構與演算法分析 C語言描述)

一、概述: 棧(stack)是限制插入和刪除只能在一個位置上進行的表,該位置是表的末端,叫做棧的頂(top)。對棧的基本操作有Push(進棧)和Pop(出棧),前者相當於插入,後者則是刪除最後插入的元素。 棧有時又叫做LIFO(後進先出)表。在圖1中描述的模型只象徵著Pus

棧的結構表示與實現——自己寫資料結構

今天給大家介紹棧的鏈式結構,用dev-c++4.9.9.2除錯通過,少廢話直接上程式碼: 資料結構體存放檔案stacklist.h檔案如下 #ifndef _STACKLIST_H_ #define _STACKLIST_H_ typedef struct _No

C語言實現佇列的基本操作

//標頭檔案內容 *************************************************鏈佇列.h******************************************************* #include<stdio.

c語言實現單鏈表資料結構及其基本操作

 帶頭結點單鏈表。分三個檔案,分別為標頭檔案,測試檔案,原始碼檔案。 給出了單鏈表的部分操作,每個操作都有對應的註釋說明該函式功能。 test.c  檔案中,對輸入資料是否合法進行了檢測,但是並未實現輸入資料不合法時應該採取的措施。 測試檔案  通過一個選單來測試單鏈

C++實現棧數據結構

c++ c #ifndef __STACK__ #define __STACK__ class CStack { int * m_pData; int m_nCount; int m_nPos; public: CStack(int n

Java實現簡單的資料結構(五)

(5)二叉樹 public class BinaryTreeNode { private Comparable data; private BinaryTreeNode root; private BinaryTreeNode left; private BinaryTreeN

Java實現簡單的資料結構(四)

(4)Queue import org.junit.Test; public class Queue { private int size = 0; private LinkedList linkedList = new LinkedList(); /** * 入隊方法

Java實現簡單的資料結構(三)

(3)Stack package com.coding.basic; import org.junit.Test; public class Stack { private ArrayList elementData = new ArrayList(); /** * 壓棧

Java實現簡單的資料結構(二)

2.LinkedList import java.util.NoSuchElementException; import org.junit.Test; public class LinkedList implements List { private Node first;

Java實現簡單的資料結構(一)

利用Java語言實現簡單的資料結構,Java中動態擴容的ArrayList,LinkedList,Stack,Queue以及二叉樹 1.ArrayList import java.util.Arrays; import org.junit.Test; public class A