C語言小結之鏈表

来源:http://www.cnblogs.com/flyingjun/archive/2016/01/31/5173111.html
-Advertisement-
Play Games

鏈表的學習 在數據結構中有一種結構叫做線性表,線性表是儲存一個線性數據的表格,本文就簡要的介紹一下線性表的構成。 一、線性表的定義定義:由同種類型數據元素構成的有序數列的線性結構長度、表頭、表尾List線性表的形式有兩種:一種是數組構成的表,另一種是鏈表。所謂數組形成的表就是一個數組,如下定義所示


鏈表的學習

在數據結構中有一種結構叫做線性表,線性表是儲存一個線性數據的表格,本文就簡要的介紹一下線性表的構成。


 

一、線性表的定義
定義:由同種類型數據元素構成的有序數列的線性結構
長度、表頭、表尾
List
線性表的形式有兩種:一種是數組構成的表,另一種是鏈表。
所謂數組形成的表就是一個數組,如下定義所示

typedef struct{
	ElementType Data[];
	int last;
}List

  

從上面可以看出一個線性表類型要包括一組數據和數據的最末尾。
這樣有一個弊端,就是在對線性表插入時需要對其後面的所有元素挪動位置。
故我們採取另一種方式,也就是鏈表的結構
結構如下:

typedef struct Node{
	ElementType Data;
	struct Node *Next;
}List;

  

二、鏈表基本功能實現
(1)求表的長度

void Length(List *Ptrl)
{
	List *p = Ptrl;
	int j =0;//記錄數量
	while(p)//結束符號為NULL
	{
		p = p->Next;
		j++;
	}
	return j;
}

  

(2)查找
按序號查找

List *FindKth(int K,List *Ptrl)
{
	List *p = Ptrl;
	int i = 1;
	while(p != NULL && i <K)
	{
	 	P = P->Next;
		i++;
	}
	if(i == K)
		return p;
	else 
		return NULL;
	
}

  

按值查找

List *Find(Element Data,List *Ptrl)
{
	List *p = Ptrl;
	while(p != NULL && p->Data != Data)
	{
		p = p->Next;
	}//找不到就是NULL
	return p;
}

  

(3)插入元素
在鏈表中某個位置插入某個元素
所以入口參數為元素內容、位置、鏈表。
出口參數為新的鏈表。

List *Insert(ElementType X,int i,List* Ptrl){
	List *p,*s;//新鏈表和舊鏈表
	//首先判斷參數是否有效
	p = FindKth(i-1,Ptrl);//獲取i-1號節點
	if(p == NULL)
	{
		printf("參數錯誤");
		return NULL;
	}
	else
	{
		//如果在表頭插入元素
		if(i == 1){//重新申請一片空間
			s = (List*)malloc(sizeof(List));
			s->Data = X;
			s->Next = Ptrl;
			return Ptrl;
		}
		else{
			s = (List*)malloc(sizeof(List));
			s->Data = X;//交接工作  新節點插入
			s->Next = p->Next;
			p->Next = s;
			return Ptrl;
		}
	}
}

  

(4)刪除元素
List* Delete(int i, List *PtrL)
1、先找到鏈表的第 i-1 個結點,用p 指向;
2、再用指針s 指向要被刪除的結點:P的下一個節點
3、然後修改指針,刪除s 所指結點;
4、最後釋放s 所指結點的空間。

List* Delete(int i, List *PtrL)
{
	List *p,*s;//新舊鏈表
	//判斷數據有效性
	p = FindKth(i-1,Ptrl);//獲取i-1號節點
	if(p == NULL)
	{
		printf("參數錯誤");
	}
	else{
		if(i == 1){//在頭部插入元素
			p = p->next;
			free(s);
			return Ptrl;
		}
		else{
			s = p->Next;
			p->Next = s->Next;
			free(s);
			return Ptrl;
		}
	}
}

  

註意:在進行指針操作時要記住判斷是否為空;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • runstats工具是《 oracle database 9i/10g/11g編程藝術 深入資料庫體繫結構》作者寫的一個統計性能工具,能對做同一件事的兩個方法進行比較,得到孰優孰劣的結果。 (看到runstats想到了db2 里有runstats命令收集統計信息) runststs工具主要測量三個要
  • 前言 - 會寫這篇除了是要記錄一下使用的過程之外,也是發現到網路上找來的教學幾乎都是跟其它環境做結合 比較沒有單純利用command進行的流程。也沒有整體觀念的介紹,所以將我所理解的整理分享給大家。 因我對於Git版本控制比較熟悉,這當中會借用一點Git的觀念來做解釋 :) liquibase -
  • 雖然西西不建議大家去用命令刪除資料庫表中的東西,但是這些刪除命令總有用的著的地方。 說到刪除表數據的關鍵字,大家記得最多的可能就是delete了 然而我們做資料庫開發,讀取資料庫數據.對另外的兩兄弟用得就比較少了 現在來介紹另外兩個兄弟,都是刪除表數據的,其實也是很容易理解的 老大------dro
  • 一、簡介 Chocolatey是Windows下包管理工具,可以使用 Chocolatey 來安裝應用程式。 二、安裝 1)線上安裝:參見 主頁 官網:https://chocolatey.org/ 2)離線安裝:下載腳本雙擊執行 http://files.cnblogs.com/files/274...
  • 我們知道UWP是通過不同的頁面來展示不同的內容的,那麼我們該怎麼進行頁面之間的傳值呢? 首先我們在MainPage裡面寫一個ListView來展示一些英文單詞。 1 List<English> wordList = new List<English> 2 { 3 new English { Word
  • List<Enterprise> epList = ViewBag.epList; foreach (var item in epList){ //todo ... } 當 List<Enterprise> epList = ViewBag.epList; 變為 List<EnterpriseInf
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...