1. 程式人生 > >單鏈表的建立和增刪改查程式碼及講解

單鏈表的建立和增刪改查程式碼及講解

//---單鏈表的單鏈式儲存結構----
typedef struct LNode
{
	ElemType data;
	struct LNode *next;
}LNode,*LinkList;

//1.初始化
int Initlist(LinkList L)
{
	L=NULL;
	return OK;
}

//初始化(帶頭結點)
int Initlist(LinkList L)
{
	L=(LNode*)malloc(sizeof(Lnode));//為頭結點分配記憶體空間
	L->next=NULL;
	return OK;
}

//求長度
int length_L(LinkList L)
{
	i=0;
	p=L->next;//把第一個資料賦給p
	while(p)//但p不為空的時候,那就一直計數
	{
		i++;
		p=p->next;
	}
	return i;
}
//3.訪問第I個元素

Status GetElem_L(LinkList L,int i,ElemType &e)
		//L為帶頭結點的單鏈表的頭指標
	{
		p=L->next;//p是連結串列的第一個元素
		j=1;
		while(p&&j<i)//當p指標存在並且沒有到底i個元素的時候
		{
			p=p->next;//讓p向前移動
			j++;//讓J也自加1,直到J=I
		}
		if(!p||j>i)//找到最後還沒有找到是,返回ERROR
			return ERROR;
		e=p->data;//把找到的數值賦給e,然後返回。
		return OK;
	}

	//4.在p所指節點之後插入某一元素

	q=(LinkList)malloc(sizeof(LNode))

	q->data=x;//資料域賦值
	q->next=p->next;//(1)插入
	p->next=q;//(2)

	//5.插入:在帶頭指標的單鏈表L中第I個位置之前插入元素e
	Status Listinsert_L(LinkList &L,int i,ElemType e)
	{
		p=L;
		j=0;
		while(p&&j<i-1)//知道移動到需要插入的前一個元素
		{
			p=p->next;
			j++;
		}

		if(!p||j>i-1)//如果移動到結尾還沒有達到第I個元素,那就返回ERROR
		return ERROR;
		s=(LinkList)malloc(sizeof(LNode));//為插入的元素分配記憶體空間
		s->data=e;
		s->next=p->next;//(1)插入操作
		p->next=s;//(2)
		return OK;
	}

	//6.刪除:刪除P所指元素的後繼元素
	//直接把前一節點的指標跳過一個節點,然後到下一個節點
Status ListDelete_L(LinkList &L,int i,ElemType &e)
//在帶頭結點的單鏈線性表L中,刪除第i個元素,並由e返回其值
{
	p=L;
	j=0;
	while(p->next&&j<i-1)
		{//尋找第i個節點,並令p指向其前驅
			p=p->next;
			j++;
		}

	if(!(p->next)||j>i-1)
	return ERROR;
	p->next=p->next->next;//跳過刪除的那個節點
	e=q->data;//把刪除的值賦給e
	free(q);//釋放已刪除節點的空間
	return OK;
}
//7.建立:輸入線性表元素,以單鏈表儲存方式儲存,即建立單鏈表
//方法一:從頭到尾,即從第一個元素節點逐個建立各個元素節點。
//每次都是鏈到連結串列的最後。(從無到有的建立)

//建立頭結點
L.(LinkList)malloc(sizeof(LNode));
L->next=NULL;
r=L;//指標r始終指向尾節點,然後向後移動

//讀入一個元素,鏈入其中:
p=(LinkList)malloc(sizeof(LNode));//為插入的新的節點開闢空間
scanf(&p->data);//讀入資料
p->next=NULL;//尾節點的下一位為空
r->next=p;//指標r始終指向尾節點,然後移動
r=r->next;

//方法二:從尾到頭,

//建立頭結點
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;

//讀入一個元素,鏈入其中
p=(LinkList)malloc(sizeof(LNode));//為新節點開闢記憶體空間
scanf(&p->data);//讀入資料
p->next=L->next;//讓頭結點指標的地址賦給新節點的指標指向
L->next=p;//讓頭結點指標指向新插入的數值元素

//建立演算法:(逆序)

void CreateList_L(LinkList &L,int n)
{
	L=(LinkList)malloc(sizeof(LNode));//為頭節點分配記憶體空間
	L->next=NULL;
	for(i=n;i>0;i--)
	  {
	       p=(LinkList)malloc(sizeof(LNode));//為新節點開闢內除空間
		   scanf(&p->data);//讀入資料
		   p->next=L->next;//讓插入的節點指標指向尾節點,然後把頭節點指標破壞
		   L->next=p;//讓頭結點指標指向新節點
	  }
}

//單鏈表的歸併演算法
//已知單鏈表La和Lb的元素按值非遞減排列

void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc)
{
	pa=La->next;//兩個連結串列La和Lb
	pb=Lb->next;
	Lc=pc=La;//讓La的頭結點指標最為起始點
	while(pa&&pb)//當兩個連結串列都非空的時候
	{
		if(pa->data<=pb->data)//如果La->data<=pb->data,那麼就讓La插入
		{
			pc->next=pa;//讓La插入,並讓連結串列La下一個元素與Lb比較
			pc=pa;//讓移動指標指向連結串列La
			pa=pa->next;
		}
		else
		{
			pc->next=pb;
			pc=pb;
			pb=pb->next;
		}
		pc->next=pa?pa:pb;//到最後,如果LA有剩餘就全部插入,否則就把LB插入
		//等價於如下程式碼
		//if(pa)
		//pc->next=a;
		//else  pc->next=pb

		free(Lb);//由於Lc是以LA作為起始的,最後釋放連結串列LB
	}
}

相關推薦

單鏈建立刪改程式碼講解

//---單鏈表的單鏈式儲存結構---- typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList; //1.初始化 int Initlist(LinkList L) { L

Django中ORM建立刪改方法示例

Django中ORM表的建立和增刪改查方法示例 Django作為重量級的Python web框架,在做專案時肯定少不了與資料庫打交道,程式設計人員對資料庫的語法簡單的還行,但過多的資料庫語句不是程式設計人員的重點物件。因此用ORM來操作資料庫相當快捷。今天來介紹一下

【pandas】[1] Series 入門(建立刪改)

作者:lianghc 地址:http://blog.csdn.net/zutsoft/article/details/51482573 Series 是pandas兩大資料結構中(DataFrame,Series)的一種。使用pandas 前需要將pandas 模組引入,因

oracle資料庫建立刪除空間、使用者刪改

資料庫 檢視sql資料庫中的所有表空間 select * from dba_data_files; 刪除表空間 SQL> drop tablespace db_data including contents and datafiles;

mysql-3 資料建立刪改

建立資料表 通用語法:CREATE TABLE table_name (column_name column_type); CREATE TABLE IF NOT EXISTS `csj_tbl`( `csj_id` INT UNSIGNED AUTO_INCREMENT, `csj_ti

基於 Linux 的雙鏈刪改程式碼

/************************************************************************* > File Name: doublelinklist.c > Author: Wenfei6316

【pandas】[2] DataFrame 基礎,建立DataFrame刪改基本操作(1)

作者:lianghc 地址:http://blog.csdn.net/zutsoft         DataFrame 是pandas最常用的資料結構,類似於資料庫中的表,不過DataFrame不僅僅限制於2維,可以建立多維資料表。DataFrame既有行索引,也有列

SpringMVC單資料刪改簡易梳理(含例項程式碼

      使用SpringMVC建立表單進行資料的增刪改查是javaEE開發的基本功,本人根據自己最近開發的基於jeecms框架的網站平臺來梳理資料增刪改查的思路。      首先根據所需表單頁面設計資料庫,定義不同欄位的資料型別和長度,若存在多張資料表,還需設計不同表間的

012:子查詢刪改

err eat 多個 cal mat 行數 分類 查詢 同時 一. 子查詢 子查詢就是指在一個select語句中嵌套另一個select語句。同時,子查詢必須包含括號。 MySQL 5.6.x 版本之前,MySQL的子查詢性能較差,但是從5.6開始,不存在性能差的問題。

詳細記錄->使用Maven+SSM框架,實現單簡單的刪改

       話不多說,ssm框架整合小列子,這次記錄一個單表增刪改查的ssm例子,所以才手寫mapper,平時我都是用逆向工程自動生成mapper,簡單方便。 需要了解逆向工程請看:https://blog.csdn.net/Destiny_stri

Hibernate的入門之配置檔案刪改

首先使用maven匯入jar包,然後配置主xml檔案 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Confi

java DMO刪改程式碼的自動生成

之前我考慮過多種自動生成程式碼的提供方式,比如web的方式,通過在頁面文字框裡面輸入各種引數,比如模板檔案地址,生成檔案地址,資料庫名,資料庫使用者名稱和密碼等,點選生成按鈕就可以生成原始碼檔案。但這樣需要部署啟動這個web程式。使用java的圖形使用者介面,但我對java圖形的相關API並不瞭解,

MYSQL的常用命令刪改語句資料型別

連線命令:mysql -h[主機地址] -u[使用者名稱] -p[使用者密碼] 建立資料庫:create database [庫名] 顯示所有資料庫: show databases; 開啟資料庫:use [庫名] 當前選擇的庫狀態:SELECT DATABASE(); 建立資料表:CRE

告別編寫基礎的刪改程式碼

    告別編寫基礎的增刪改查程式碼    一、 說明   1.本文基本幫你實現不用編寫基礎的增刪改查程式碼 注意是“基礎”的,你只需要寫一個實體類,其他都可以自動生成包括 mapper、dao、service、controller、建表sql。   &nbs

spring data jpa之資料刪改程式碼優化

Spring data jpa為減少查詢資料庫次數,先將符合條件的資料查出來,返回的是一個list集合,遍歷集合將資料裝入map中,根據需要設定key,value,然後判斷map是否包含某個key或者value以此判斷資料是否在資料庫中已經存在。這樣減少了訪問資料庫的次數,減小了伺服器壓力,將大部分

【springboot】4、SpringBoot+Mybatis多操作以及刪改

Mybatis整合成功之後,接下來了解一下增刪改查的配置以及多表操作,先從增刪改查開始 為了方便後面的多表操作,現在針對資料表的配置我這裡全部在xml中配置(暫時不用註解的方式了),先看一下目前的工程結構(注意包名) 首先為了瞭解增刪改查的操作,我這裡將針對資料庫中的一個文

平衡二叉樹建立及其刪改(JAVA)

平衡二叉樹:指的是左右子樹高度差的絕對值不超過一的二叉排序樹。 主要思路:1、用左高度跟右高度代替平衡因子,大於1進行L~調整,小於-1進行R~調整                   2、每次插入都通過遞迴計算一次各結點高度,然後進行旋轉調整            

Django學習【第6篇】:Django之ORM單操作(刪改

大小寫 則表達式 分享 cnblogs 可能 集合 數據庫 cut 對象 django之數據庫表的單表查詢 一、添加表記錄 對於單表有兩種方式 # 添加數據的兩種方式 # 方式一:實例化對象就是一條表記錄

golang mongoDB 的集合建立以及刪改操作

mongo官方沒有golang 的官方驅動,但是有一個社群驅動: http://labix.org/mgo api文件:https://godoc.org/gopkg.in/mgo.v2#Collection.Update 資料的連線操作請看的我的上一篇部

php 如何在HTML頁面中實現對資料庫資料的刪改

  上一篇詳細說明了如何將資料庫中的資料列印到html頁面上,本篇將介紹如何在HTML頁面的表格裡進行對資料庫內容的增刪改查還是借用上一篇的頁面,在此基礎上增加了操作按鈕:<!doctype html><html><head><meta charset="utf-8"