1. 程式人生 > >單鏈表的基本操作(增加,查詢,刪除,修改)-- C 語言

單鏈表的基本操作(增加,查詢,刪除,修改)-- C 語言

#include <stdio.h>
#include <stdlib.h>


typedef struct Link
{
	// 資料域 
	int data;
	// 指標域,指向下一個相同型別的結點 
	struct Link *next;
}nodeLink;
// *Link 是頭指標的哇 

// 初始化
void initLink(nodeLink *L)
{
	L = (nodeLink *)malloc(sizeof(nodeLink));
	if(!L)
	{
		printf("建立記憶體空間失敗\n");
		exit(0);
	}
	
	printf("建立成功\n");
} 

//建立賦初值連結串列
void createLink(nodeLink *L)
{
	nodeLink *temp = (nodeLink *)malloc(sizeof(nodeLink)); // 首元節點初始化 
	
	for(int i=1;i<5;i++)
	{
		L->data = i;
		L->next = NULL;
		temp->next = L;
		temp = temp->next;
		L= (nodeLink *)malloc(sizeof(nodeLink));
	}
	
	printf("初始化成功\n"); 
	
}

// 展示
void display(nodeLink *L)
{
	nodeLink *temp = L;
	while(temp)  // 不是 temp->next,而是 temp 本身不為空 
	{
		printf("%d,",temp->data);
		temp = temp->next;
	}
	
	printf("\n");
 } 
 
// 查詢
// loc 是要查詢的元素 
void  check(nodeLink *L,int loc)
{	
	int i=0;
	
	while(L)
	{
		if(i == loc)
		{
			printf("要查詢的元素:%d\n",L->data);
		}
		L=L->next;
		i++;
	 } 
}

// 插入
// elem 是你要插入的值 ,loc 是要插入的位置  
void insertLink(nodeLink *L,int elem,int loc)
{
	int i=0; 
	nodeLink *p;
	p = (nodeLink *)malloc(sizeof(nodeLink));  // 一個新的節點 
	
	while(L->next)
	{
		if(i == loc)
		{
			p->next = L->next;
			L->next = p;
			p->data = elem;
			printf("插入成功!\n");
			break;
		}
		else
		{
			L = L->next;
			i++;
		}
			
	}	
} 

// 刪除
// loc 是要刪除的位置  
void deleteElem(nodeLink *L,int loc)
{
	int i=0; 
	
	while(L->next)
	{
		if(i == loc)
		{
			L->next = L->next->next;
			printf("刪除成功!\n");
			break;
		}
		else
		{
			L = L->next;
			i++;
		}
			
	}	
}

// 修改
// elem 是要修改的值,loc 是修改值的位置
void update(nodeLink *L,int elem,int loc)
{	
	int i=0;
	while(L->next)
	{
		if(i == loc)
		{
			L->data = elem;
			printf("修改成功!\n");
			break;
		}
		else
		{
			L = L->next;
			i++;
		}
			
	}	
}  
 
main()
{
	nodeLink L;
	initLink(&L);
	createLink(&L);
	display(&L);
	check(&L,2);
	insertLink(&L,200,2);
	display(&L);
	deleteElem(&L,2);
	display(&L);
	update(&L,1024,2);
	display(&L); 
} 

相關推薦

Java單鏈基本操作--查詢倒數第K個節點

package listnode; /** * @author Gavenyeah * @date Start_Time:2016年4月1日 上午11:47:44 * @date End_Ti

單鏈 基本操作元素遞增排序

題目描述: 有一個帶頭節點的單鏈表L(至少有一個數據節點),設計一個演算法使其元素遞增有序排列。 解題思路: 由於單鏈表L中有一個以上的資料節點,首先構造一個只含有頭結點和首節點的有序單鏈表(只含有一個數據節點的單鏈表一定是有序的),然後掃描單鏈表L餘下的節點(由P指向),在有序單鏈表中

單鏈基本操作刪除連結串列中最大元素

題目描述: 設計一個演算法,刪除一個單鏈表L中元素值最大的節點(假設這樣的節點唯一) 解題思路: 在單鏈表中刪除一個節點先要找到它的前驅節點,用指標p掃描整個單鏈表,pre指向節點p的前驅節點,在掃描時用maxp指向data域值最大的節點,maxpre指向maxp所指節點的前驅節點,當連

Java單鏈基本操作--排序

單鏈表的插入排序比陣列麻煩,因為每次都都要從頭節點開始往後遍歷,頭節點也需要單獨處理 package listnode; /** * @author Gavenyeah * @date St

Java單鏈基本操作--合併兩個有序單鏈

package listnode; /** * @author Gavenyeah * @date Start_Time:2016年4月1日 下午15:01:47 * @date End_Ti

Java單鏈基本操作--刪除重複節點;

package listnode; public class DeleteDuplecate_SingleList { public static void main(String[] arg

Java單鏈基本操作--單鏈反轉

單鏈表反轉是筆試面試中考察最多的演算法之一,是單鏈表裡必須要熟練掌握的演算法。 /** * @author Gavenyeah * @date Start_Time:2016年4月1日 上午

單鏈基本操作增加查詢刪除修改-- C 語言

#include <stdio.h> #include <stdlib.h> typedef struct Link { // 資料域 int data; // 指標

C++ 單鏈表基本操作分析與實現 連結串列   連結串列是一種物理儲存單元上非連續、非順序的儲存結構資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。連結串列由一系列結點連結串列中每一個元素稱為結點組成

連結串列   連結串列是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。連結串列由一系列結點(連結串列中每一個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:一個是儲存資料元素的資料域,另一個是儲存下一個結點地址的指標域。 相比於線性表

單鏈 簡單題單鏈基本操作

題目描述: 有一個帶頭結點的單鏈表L=(a1,b1,a2,b2,......an,bn),設計一個演算法將其拆分成兩個帶頭結點的單鏈表L1和L2,其中L1=(a1,a2,a3...an),L2=(b1,b2,b3....bn),要求L1使用L的頭結點。 解題思路: 利用原單鏈表L中的所有

資料結構之連結串列1單鏈基本操作

1.前言 1.1宣告 文章中的文字可能存在語法錯誤以及標點錯誤,請諒解; 如果在文章中發現程式碼錯誤或其它問題請告知,感謝! 2.關於連結串列 2.1什麼是連結串列 連結串列可以看成一種在物理儲存單元上的非連續、非順序儲存的資料結構,該資

單鏈基本操作讀取、插入、刪除及優缺點總結

1.單鏈表的讀取 獲取連結串列第i個數據的演算法思路: 1. 宣告一個指標p指向連結串列的第一個結點,初始化j從1開始; 2. 當j< i 時,遍歷連結串列,讓p的指標向後移動,不斷指向下一結點,j累加1; 3. 若到連結串列末尾p為空,說明第i個

單鏈基本操作C語言實現鏈式儲存結構

#include<stdio.h> #include<stdlib.h> typedef int DataType; typedef struct Node{ DataType data; struct Node *next; }

資料結構c語言——線性單鏈基本操作

#include <stdio.h> #include <stdlib.h> typedef int Element; typedef char(*Status)[10]; #define ERROR "error" #define OK "ok"

C 資料結構中單鏈基本操作

C中的typedef C中的typedef關鍵字作用是為一種資料型別定義一個新名字,這樣做的目的有兩個,一是給變數定義一個易記且意義明確的新名字,如: typedef unsigned char BYTE; 把unsigned char型別自命名為BYTE。另一個目的是

6-1 順序基本操作 10 分

本題要求實現順序表元素的增、刪、查詢以及順序表輸出共4個基本操作函式。L是一個順序表,函式Status ListInsert_Sq(SqList &L, int pos, ElemType e)是在順序表的pos位置插入一個元素e(pos應該從1開始),函式Status ListDelete_Sq(S

【資料結構】單鏈-----基本操作

刪除指定位置的節點 void Erase(pList * pplist, pNode pos) { assert(pplist != NULL); assert(pos != NULL); if (*pplist == pos)//如果指向第一個節點

資料結構篇:單鏈基礎操作

已知帶頭結點的單鏈表,存放一組整型數 ①建立n個元素的單鏈表 ②計算連結串列中值大於x的結點的個數,int countx(lnode *head,int x) ③兩個連結串列ha,hb存放整型數,每個連結串列中無相同元素,hc=ha∩hb,即ha和hb中相同元素放入hc中,v

6-2 順序基本操作 10 分

6-2 順序表基本操作 (10 分) 本題要求實現順序表元素的增、刪、查詢以及順序表輸出共4個基本操作函式。L是一個順序表,函式Status ListInsert_Sq(SqList &L, int pos, ElemType e)是在順序表的pos位置插入一個元

c++學習筆記—單鏈基本操作的實現

用c++語言實現的單鏈表基本操作,包括單鏈表的建立(包括頭插法和尾插法建表)、結點的查詢、刪除、排序、列印輸出、逆置、連結串列銷燬等基本操作。 IDE:vs2013 具體實現程式碼如下: #include "stdafx.h" #include <malloc.h