1. 程式人生 > >C++ 單鏈表建立、插入和刪除

C++ 單鏈表建立、插入和刪除

#include <iostream>
#include <stdio.h>
#include <string>
#include <conio.h>
 
/**
* cstdio是將stdio.h的內容用C++標頭檔案的形式表示出來。
*stdio.h是C標準函式庫中的標頭檔案,即:standard buffered input&output。
*提供基本的文字的輸入輸出流操作(包括螢幕和檔案等)。                                                                   
*/
 
/**
*conio是Console Input/Output(控制檯輸入輸出)的簡寫,其中定義了通過控制檯進行資料輸入和資料輸出的函式,
*主要是一些使用者通過按鍵盤產生的對應操作,比如getch()()函式等等。                                                       
*/
 
using namespace std;
 
struct node
{
	int data;
	node *next;
};
// 建立單鏈表
node *creat()
{
	node *head, *p;
	head = new node;
	p = head;
	
	int x, cycle = 1;
	while (cycle)
	{
		cout << "Please input the data for single linker : ";
		cin >> x;
 
		if (x != 0)
		{
			node *s = new node;
			s->data = x;
			cout << "Input data : " << x << endl;
 
			p->next = s;
			p = s;
		} 
		else
		{
			cycle = 0;
			cout << "Input done! " << endl;
		}
	}
 
	head = head->next;
	p->next = NULL;
	//cout << "\nFirst data of single linker is " << head->data << endl;
	
	return head;
}
 
// 單鏈表測長
int length(node *head)
{
	int n   = 0;
	node *p = head;
 
	while (p != NULL)
	{
		p = p->next;
		n++;
	}
 
	return n;
}
 
// 單鏈表列印
void printL(node *head)
{
	node *p = head;
 
	while(p != NULL)
	{
		cout << "Single Linker data is " << p->data << endl;
		p = p->next;
	}
}
 
// 單鏈表插入
node *insert(node *head, int num)
{
	node *p0, *p1, *p2;
	p1 = head;
 
	p2 = new node;
	p0 = new node; // 插入節點
	p0->data = num;// 插入資料
 
	while (p0->data > p1->data && p1->next != NULL)
	{
		p2 = p1;
		p1 = p1->next;// p0,p1和p2位置: p2->p1->p0
	}
 
	if (p0->data <= p1->data)
	{
		if (p1 == head)
		{// 頭部前段插入 p0和p1位置: p0->p1->...
			head = p0;
			p0->next = p1;		
		} 
		else
		{// 插入中間節點 p0,p1和p2位置: p2-> p0 -> p1
			p2->next = p0;
			p0->next = p1;
		}
	} 
	else
	{   // 尾部插入節點 p0,p1和p2位置: p2->p1->p0->NULL
		p1->next = p0;
		p0->next = NULL;
	}
	return head;
}
 
// 單鏈表刪除
node *del(node *head, int num)
{
	node *p1, *p2;
	p2 = new node;
	p1 = head;
 
	while (num != p1->data && p1->next != NULL)
	{
		p2 = p1;
		p1 = p1->next;// p1和p2位置: p2->p1		
	}
 
	if (num == p1->data)
	{
		if (p1 == head)// 刪除頭節點
		{
			head = p1->next;
			delete p1;
		} 
		else
		{
			p2->next = p1->next;
			delete p1;
		}
	} 
	else
	{
		cout << num << " could not been found in the current single linker!" << endl;
	}
	return head;
}
 
 
int main()
{
	cout << "***建立單鏈表***" << endl;
	node *head = creat();
	cout << endl;
 
	cout << "***計算連結串列長***" << endl;
	int n = length(head);
	cout << "The length of input single linker is " << n << "." << endl;
	cout << endl;
 
	cout << "***列印單鏈表***" << endl;
	printL(head);
	cout << endl;
 
	cout << "****插入節點****" << endl;
	cout << "Please input the data for inserting operate : ";
	int inData;
	cin >> inData;
	head = insert(head,inData);
	printL(head);
	cout << endl;
 
	cout << "****刪除節點****" << endl;
	cout << "Please input the data for deleting operate : ";
	int outData;
	cin >> outData;
	head = del(head, outData);
	printL(head);
	cout << endl;
 
	return 0;
}

1.頭節點插入和刪除結果

2.中間節點插入和刪除結果

3.尾結點插入和刪除結果

相關推薦

C++ 單鏈建立插入刪除

#include <iostream> #include <stdio.h> #include <string> #include <conio.h> /** * cstdio是將stdio.h的內容用C++標頭檔案的形式表

單鏈建立插入刪除操作

單鏈表的建立、插入和刪除操作 #include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct List { ElemType data;

C++寫的帶有頭結點單鏈建立插入刪除,顯示

#include<iostream> usingnamespacestd; structlink { chardata; structlink*next; }; link*head,*tail;//建立頭指標和尾指標 intcreat(); /******

JQuery學習筆記(四)——建立插入刪除節點

一個小練習: 需求1: 點選 submit 按鈕時, 檢查是否選擇 type, 若沒有選擇給出提示: "請選擇型別";  檢查文字框中是否有輸入(可以去除前後空格), 若沒有輸入,則給出提示: "請輸入內容"; 若檢查都通過, 則在相應的 ul 節點中新增對應的 li 節點

單鏈建立插入刪除

學程式設計的小菜鳥一枚,希望未來好好學習天天向上~ 歡迎各位大神前來指正~ 放上資料結構的初次作業^_^(其實。。只做了一部分(°-°)) 以下函式在VC6.0的環境中執行通過 //定義結構體 typedef struct link { int

單鏈的基礎操作(頭插法尾插法插入刪除

一、連結串列的建立(頭插法和尾插法) 1、頭插法:把後建立的結點插在頭部。用這種方法建立起來的連結串列的實際順序與輸入順序剛好向反,輸出時為倒序! 下面附上程式碼: struct node *headcreat() { struct node *p,*q,*head;

C語言)連結串列的建立遍歷插入刪除

作者:翁鬆秀 (C語言)連結串列的建立、遍歷、插入和刪除 (C語言)連結串列的建立、遍歷、插入和刪除 連結串列結構定義

phpMyAdmin 安裝,建立修改刪除資料庫及插入瀏覽搜尋資料中的資料

phpMyAdmin是眾多MySQL圖形化管理工具中使用最廣泛的一種,不管是Windows還是Linux,都可以通過該管理工具可以對MySQL進行各種操作。 一、下載及安裝 使用者可以在官方網站上免費下載最新版本,免費下載 下載好後,把壓縮包解壓到apache的專案目錄中,開啟config

B樹C語言實現-建立插入刪除

1. 課程設計題目標題:  B樹的基本操作演算法(建立、插入、刪除) 問題描述:  在電腦科學中,B樹在查詢、訪問、插入、刪除操作上時間複雜度為O(log2~n),與自平衡二叉查詢樹不同的是B樹對大塊資料讀寫的操作有更優的效能,其通常在資料庫和檔案系統中被使用。   對於

AVL樹的構造插入刪除C++)

昨天搞了一個晚上,可算是把AVL樹的概念搞明白。而後又參閱了大量的部落格和書籍,終於是自己搞了一套程式碼(期間各種BUG搞得我欲仙欲死= =、)雖然考研可能不要求實現,但還是寫點東西,就算是自己總結一下吧。 AVL樹是一種BST(二叉搜尋樹),但是AVL是需要保持平衡的,即

MySQL-建立修改刪除

表是資料庫儲存資料的基本單位。一個表包含若干個欄位或記錄。表的操作包括建立新表、修改表和刪除表,這些操作都是資料庫管理中最基本、也是最重要的操作。 建立表 建立表是在已存在的資料庫中建立新表。 建立表的語法格式 MySql中,建立表是通過SQL語句create table

DOM(創建插入刪除元素)

http tag img 簽名 har col script value 技術分享 1.創建DOM元素 createElement(標簽名) 創建一個節點 appendChild(節點) 追加一個節點 例子:為ul插入li 並且為li元素插入一些文字

演算法導論 第十二章:二叉查詢樹 筆記(二叉查詢樹查詢二叉查詢樹插入刪除隨機構造的二叉查詢樹)

二叉查詢樹是一種樹資料結構,它與普通的二叉樹最大的不同就是二叉查詢樹滿足一個性質:對於樹中的任意一個節點,均有其左子樹中的所有節點的關鍵字值都不大於該節點的關鍵字值,其右子樹中的任意一個節點的關鍵字值都不小於該節點的關鍵字值。 在二叉查詢樹上可以進行搜尋、取最小值、取最大值、取指定節點的前驅

Delete Node in a BST 二叉查詢樹的查詢插入刪除 - Java實現

https://leetcode.com/problems/delete-node-in-a-bst Given a root node reference of a BST and a key, delete the node with the given key in the BST. Return t

C++ XML的建立讀取修改(一)

跟C#不太一樣,需要呼叫一個TinyXML庫來生成XML,庫的原始碼地址為https://github.com/leethomason/tinyxml2,找到“clone or down”進行下載,,解壓之後,將tinyxml2.h 和 tinyxml2.cpp放入工程檔案中,呼

MySQL索引操作:建立新增刪除索引

如果對索引的作用不太瞭解的建議先閱讀上一篇博文:MySQL索引的作用和分類介紹 建立索引 建立表的時候建立索引 格式: CREATE TABLE 表名[欄位名 欄位型別] [UNIQUE|FULLTEXT|SPATIAL|...] [INDEX|K

二叉搜尋樹的查詢最值查詢插入刪除

對於一棵二叉搜尋樹,如果不為空,它應該滿足以下三個特點:1、樹上的任一結點,該結點的值都大於它的非空左子樹的值。2、樹上的任一結點,該結點的值都小於它的非空右子樹的值。3、任一結點的左右子樹都是二叉搜尋樹。對於二叉搜尋樹的查詢,思路方法是:1、從根結點開始查詢,如果樹為空,就

二叉搜尋樹的定義查詢插入刪除

二叉搜尋樹的定義 二叉搜尋樹,也稱有序二叉樹,排序二叉樹,是指一棵空樹或者具有下列性質的二叉樹: 1. 若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 2. 若任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 3. 任意節

B樹的定義插入刪除

B樹基本定義: B樹是為磁碟或其他直接存取的輔助儲存裝置而設計的一種平衡搜尋樹。 一棵B樹是具有以下性質的有根樹: 1. 每個結點x有下面的屬性:     a. x.n,當前儲存在結點x中的關鍵字個數;     b. x.n個關鍵字本身,x.key[1], x.key[2]

資料結構作業程式碼儲存-2.1 單向迴圈連結串列的建立插入刪除指標移動

在此感謝我親愛的大神同學們!一個Z妹子講情了思路,一個M妹子提供了更高階的雙向迴圈連結串列的程式碼借鑑(雖然有些還是沒怎麼看懂。。。 我的作業就完成啦!儲存程式碼當個紀念! 1,往操作位置順時針的下一位插入一個元素,並將操作位置移到新元素上。 2,刪掉操作位置順時針方