1. 程式人生 > >資料結構之迴圈單鏈表(C++實現)

資料結構之迴圈單鏈表(C++實現)

基本的概念與連結串列相同,不同的是 最後一個鏈結點的指標指向頭部 形成了迴圈連結串列

#include <iostream>
using namespace std;

class Node
{
	public:
		Node *next;
		int data;
};

class CircleList
{
	private:
    	Node* head;
    	int length;
    public:
    	CircleList()
    	{
    		head = new Node();
    		head->next = head;
    		head->data = 0;
    		length = 0;
		}
    	~CircleList()
    	{
    		delete(head);
		}
    	void createCircleList(int n);  //建立單向迴圈連結串列 
    	void traverseNode(); 		   //遍歷連結串列
		void deleteNode(int n);        //刪除位置為n的結點 
		void insertNode(int n,int data);//在制定位置插入結點
		int getLength();               //得到連結串列長度
		bool isEmpty();                //判斷連結串列是否為空 
};
void CircleList::createCircleList(int n)     //建立方式大同小異,唯一的區別就是建立的最後將尾結點指向頭結點 
{
	if(n<0)
	{
		cout << "你輸入的長度不正確 " << endl;
	}
	else
	{
		length = n;
		printf("請輸入你要儲存的資料:");
        Node *p,*q;
        p = head;
        while(n--)
        {
        	q = new Node();
			cin >> q->data;
			p->next = q;
			q->next = head;
			p = q;
		}
	}
} 
void CircleList::traverseNode()  //遍歷連結串列 
{
	Node *p;
	p = head->next;
	while(p!=head)
	{
		printf("%d ",p->data);
		p=p->next;
	}
	printf("\n"); 
}

void CircleList::deleteNode(int n)      //刪除n位置的結點
{
	if(n<0||n>length)
	{
		printf("刪除的位置是錯誤的\n");
		return;		 
	}
	else
	{
		Node *p,*q;
		p = head;
		for(int i=1;i<n;i++)
			p=p->next;
		q = p->next;
		p->next = q->next;
		delete q;
		q = NULL;
	}
}

void CircleList::insertNode(int n,int data)    //在n位置插入一個結點  結點的值為data
{ 
	Node *q,*p = new Node();
	p->data = data;	
	q = head;
	for(int i = 1;i<n;i++)
		q = q->next;
	p->next = q->next;
	q->next = p;
}


int CircleList::getLength()     //返回迴圈連結串列長度
{
	return length;
}

bool CircleList::isEmpty()      //判斷是否為空
{
	return head==head->next; 
}

int main()
{
	CircleList list;
	int n,data;
	cout << "請輸入你要儲存的資料個數:";
	cin >> n;
	list.createCircleList(n);
	list.traverseNode();
	
	cout << "請選擇你要刪除的結點位置:";
	cin >> n; 
	list.deleteNode(n);
	list.traverseNode();
	
	cout << "請輸入你要插入的下標和值:";
	cin >> n >> data;
	list.insertNode(n , data);
	list.traverseNode();
	
	return 0;
}

測試結果




相關推薦

資料結構迴圈單鏈(C++實現)

基本的概念與連結串列相同,不同的是 最後一個鏈結點的指標指向頭部 形成了迴圈連結串列#include <iostream> using namespace std; class Node { public: Node *next; int data;

java資料結構迴圈單鏈

直接上程式碼舉例說明: public class CircularLinkedList { //java中迴圈單鏈表 private class Node {//建立一個內部節點類 private Node next = null; private Objec

資料結構鏈式實現--單鏈(C語言)

學習參考: 嚴蔚敏: 《資料結構-C語言版》 基本操作: 單鏈表的建立 新增結點(頭插法) 新增結點(尾插法) 單鏈表的輸出 單鏈表的修改 單鏈表的插入 單鏈表的刪除 單鏈表按

資料結構鏈式實現--單向迴圈連結串列(C語言)

 學習參考: 嚴蔚敏: 《資料結構-C語言版》 單向迴圈連結串列的基本操作 單向迴圈連結串列的建立 單向迴圈連結串列新增結點(頭插法) 單向迴圈連結串列新增結點(尾插法) 單向迴圈連結串列

資料結構複習------------迴圈單鏈實現約瑟夫問題

用連結串列求約瑟夫問題: 前面小編試過用順序表來實現約瑟夫問題,用的是連用起始結點加報數然後球餘出列,這次利用迴圈單鏈表來實現。可能思考不周,但歡迎各路大神賜教! 演算法思路 : 由於約瑟夫問題是n個人圍坐一圈,所以採用迴圈連結串列實現,又由於報數可

數據結構動態順序(C實現)

int 隊列 destroy element 類型 for str ttr def 線性表有2種,分為順序表和鏈表。 順序表: 采用順序存儲方式,在一組地址連續的存儲空間上存儲數據元素的線性表(長度固定) 鏈表: 有3種,單鏈表、雙向鏈表、循環鏈表(長度不固定)

資料結構靜態單鏈

靜態連結串列L儲存 遊標 cur 5 2 3 4 0 6 7 .... 1 資料 data   A

Java版資料結構迴圈連結串列的實現

簡介 在指定結點後新增一個結點 刪除指定結點的下一個結點 獲取下一個結點 獲取結點資料 public class LoopNode { int data;//資料域 LoopNode next;//下一個結點 public Loop

資料結構——關於單鏈的頭插法和尾插法的程式碼和思路

頭插法 思路:每次插入都在第一個節點之前,頭結點之後,那每次插入時的賦值就只要將頭結點的地址賦給插入的節點,然後將插入的節點的地址依次給後面節點就可以了。 1、定義一個要插入的節點q 2、q->data內給值e 3、q->next = p->nex

資料結構---二叉樹C實現

學過資料結構的都知道樹,那麼什麼是樹? 樹(tree)是包含n(n>0)個結點的有窮集,其中: (1)每個元素稱為結點(node); (2)有一個特定的結點被稱為根結點或樹根(root)。 (3)除根結點之外的其餘資料元素被分為m(m≥0)個互不相交的集合

資料結構Java單鏈反轉

        本文為資料結構基礎,研究得不是很深。用Java實現單鏈表的反轉,雖然本文研究得不是很深,但是因為是資料結構,所以必須是在對Java記憶體比較清楚的情況下才能真正的搞懂吃透,如果對Java記憶體不夠清楚,那最多隻能學形而不能學其內在。          首先我

js資料結構與演算法--單鏈實現與應用思考

連結串列是動態的資料結構,它的每個元素由一個儲存元素本身的節點和一個指向下一個元素的引用(也稱指標或連結)組成。 現實中,有一些連結串列的例子。 第一個就是尋寶的遊戲。你有一條線索,這條線索是指向尋找下一條線索的地點的指標。你順著這條連結去下一個地點,得到另一條指向下一處的線索。得到列表中間的線索的唯一辦法

資料結構迴圈佇列(面向物件思想c++實現)

佇列是一種資料結構,它具有先進先出的特點,即FIFO(first in first out)。佇列一般有普通佇列和迴圈佇列兩種形式。我們用陣列來實現佇列,使用一般的普通佇列,當我們把隊頭元素out的時候,隊頭後的元素會逐一向前挪動,這樣就大大降低了處理效率。

C++數據結構傳統單鏈

fad div class for reverse while 結點 next using   這幾天有空重寫一下數據結構,從單鏈表開始吧,這個是C++版本的,後面會根據情況是否補充上C版本的。 這個文章寫了之後,也查看了網絡上其他的數據結構寫法,發現大家的寫法多多少少都有

資料結構 筆記:單鏈的具體實現

LinkList設計要點 -類模板,通過頭結點訪問後繼結點 -定義內部結點型別Node,用於描述資料域和指標域 -實現線性表的關鍵操作(增,刪,查,等) template<typename T> class LinkList : public List<T>

C++資料結構鏈式佇列模版實現

鏈佇列的儲存結構   將對頭指標front指向鏈佇列的頭結點(頭節點為空,不存資料),隊尾指標rear指向終端結點。元素從隊尾進入,隊首出列。 元素為空時,隊尾指標指向隊頭指標。 鏈式佇列模版實現: 功能: 1 建立 2 遍歷 4 入隊,出隊 5 獲取

資料結構雙鏈----增刪改查(C語言)

原始碼在部落格裡可下載,1C幣。或者找Q:128550014要程式碼 一、匯入標頭檔案 #include<stdlib.h> #include<stdio.h> 二、結構體的定義 //定義一個結構體,用於表示雙鏈表的一個節點 typed

資料結構及演算法——單鏈逆轉(C語言)(不間斷更新)

題目來源:浙大程式設計類實驗輔助教學平臺 本題要求實現一個函式,將給定的單鏈表逆轉。 函式介面定義: List Reverse( List L ); 其中List結構定義如下: typedef struct Node *PtrToNode; stru

資料結構學習(二)——單鏈的操作頭插法和尾插法建立連結串列

連結串列也是線性表的一種,與順序表不同的是,它在記憶體中不是連續存放的。在C語言中,連結串列是通過指標相關實現的。而單鏈表是連結串列的其中一種,關於單鏈表就是其節點中有資料域和只有一個指向下個節點的指標域。建立單鏈表的方法有兩種,分別是頭插法和尾插法。 所謂頭插法,就是按節

資料結構---列隊(單鏈實現

一、理論知識 待續 二、程式碼實現 1.節點結構體、棧頂、尾指標結構體定義 typedef int ElemType; typedef struct node { ElemType data; struct node* pNext; }node,*pNode;