欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解C語(yǔ)言之單鏈表

 更新時(shí)間:2021年11月17日 15:36:54   作者:ぃ咔哇依°ヽ  
這篇文章主要為大家介紹了C語(yǔ)言的單鏈表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

一、思路步驟

1. 定義結(jié)構(gòu)體

a.數(shù)據(jù)域:用來(lái)存放數(shù)據(jù)

b.指針域:用來(lái)存放下一個(gè)數(shù)據(jù)的位置

2.初始化

申請(qǐng)頭結(jié)點(diǎn),并將其初始化為空

3.求當(dāng)前數(shù)據(jù)元素的個(gè)數(shù)

在這里插入圖片描述

a.設(shè)置一個(gè)指針變量p指向頭結(jié)點(diǎn)和計(jì)數(shù)變量size等于0

b.循環(huán)判斷p->next是否為空,如果不為空,就讓指針p指向它的直接后繼結(jié)點(diǎn),并讓size自增

c.返回size

4.插入

插入

a.設(shè)置兩個(gè)指針,一個(gè)指向頭結(jié)點(diǎn),另一個(gè)要?jiǎng)討B(tài)申請(qǐng)內(nèi)存空間存放要插入的數(shù)
b.找到要插入位置的前一位,并判斷插入位置是否正確
c.生成新結(jié)點(diǎn),給新結(jié)點(diǎn)數(shù)據(jù)域賦值,執(zhí)行步驟①,在執(zhí)行步驟②

5.刪除

刪除

a.設(shè)置兩個(gè)指針p、q,p指向頭結(jié)點(diǎn),q指向要被刪除的結(jié)點(diǎn)

b.找到要?jiǎng)h除位置的前一位,并判斷刪除位置是否正確、存在

c.q指向被刪除的結(jié)點(diǎn),將被刪除結(jié)點(diǎn)的數(shù)據(jù)域賦值給x,p指向被刪除結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn),釋放q的內(nèi)存空間

6.釋放內(nèi)存空間

最后記得將頭結(jié)點(diǎn)置空哦!要不然容易出現(xiàn)野指針。

二、代碼

#include <stdio.h>
#include <stdlib.h>
typedef int DataType;//給int起個(gè)別名,方便以后修改
typedef struct Node
{
	DataType data;//數(shù)據(jù)域
	struct Node *next;//指針域
}SLNode;
//初始化
void ListInit(SLNode **head)
{
	*head = (SLNode *)malloc(sizeof(SLNode));//申請(qǐng)頭結(jié)點(diǎn)
	(*head)->next = NULL;
}
//求當(dāng)前數(shù)據(jù)元素個(gè)數(shù)
int ListLength(SLNode *head)
{
	SLNode *p = head;
	int size = 0;
	while (p->next != NULL)
	{
		p = p->next;
		size++;
	}
	return size;
}
//插入
int ListInsert(SLNode *head, int i, DataType x)
{
	SLNode *p, *q;
	int j;
	p = head;
	j = -1;
	while (p->next != NULL && j < i - 1)
	{
		p = p->next;
		j++;
	}
	if (j != i - 1)
	{
		printf("插入?yún)?shù)位置錯(cuò)誤!??!\n");
		return 0;
	}
	q = (SLNode *)malloc(sizeof(SLNode));//生成新結(jié)點(diǎn)
	q->data = x;
	q->next = p->next;
	p->next = q;
	return 1;
}
//刪除
int ListDelete(SLNode *head, int i, DataType *x)
{
	SLNode *p, *q;
	int j;
	p = head;
	j = -1;
	while (p->next != NULL && p->next->next != NULL && j < i - 1)
	{
		p = p->next;
		j++;
	}
	if (j != i - 1)
	{
		printf("刪除位置參數(shù)錯(cuò)誤?。?!\n");
		return 0;
	}
	q = p->next;
	*x = q->data;
	p->next = p->next->next;
	free(q);//釋放被刪除結(jié)點(diǎn)的內(nèi)存空間
	return 1;
}
//按位取
int ListGet(SLNode *head, int i, DataType *x)
{
	SLNode *p;
	int j;
	p = head;
	j = -1;
	while (p->next != NULL && j < i)
	{
		p = p->next;
		j++;
	}
	if (j != i)
	{
		printf("取出位置參數(shù)錯(cuò)誤?。?!\n");
		return 0;
	}
	*x = p->data;
	return 1;
}
//釋放
void ListDestroy(SLNode **head)
{
	SLNode *p, *q;
	p = *head;
	while (p != NULL)
	{
		q = p;
		p = p->next;
		free(q);
	}
	*head = NULL;
}

int main()
{
	SLNode *head;
	int i, x;
	ListInit(&head);
	for (i = 0; i < 10; i++)
		ListInsert(head, i, i + 10);
	ListDelete(head, 9, &x);
	for (i = 0; i < ListLength(head); i++)
	{
		ListGet(head, i, &x);
		printf("%d ", x);
	}
	ListDestroy(&head);
	system("pause");
	return 0;
}

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 用C++實(shí)現(xiàn)DBSCAN聚類算法

    用C++實(shí)現(xiàn)DBSCAN聚類算法

    本篇文章是對(duì)使用C++實(shí)現(xiàn)DBSCAN聚類算法的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C/C++ 連接MySql數(shù)據(jù)庫(kù)的方法

    C/C++ 連接MySql數(shù)據(jù)庫(kù)的方法

    本文對(duì)如何使用MySql的API連接MySql數(shù)據(jù)庫(kù),開發(fā)環(huán)境為VS2008,需要的朋友可以參考下
    2017-06-06
  • C++實(shí)現(xiàn)猜數(shù)游戲

    C++實(shí)現(xiàn)猜數(shù)游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)猜數(shù)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 談?wù)凜語(yǔ)言中位運(yùn)算你要知道的那些事兒

    談?wù)凜語(yǔ)言中位運(yùn)算你要知道的那些事兒

    C語(yǔ)言中的各種運(yùn)算都是以字節(jié)的形式進(jìn)行,在編寫很多系統(tǒng)程序時(shí),如驅(qū)動(dòng)程序、磁盤文件管理程序等,常要求將數(shù)據(jù)按位(bit)進(jìn)行運(yùn)算或者處理,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中位運(yùn)算的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • C++中main函數(shù)怎樣調(diào)用類內(nèi)函數(shù)

    C++中main函數(shù)怎樣調(diào)用類內(nèi)函數(shù)

    這篇文章主要介紹了C++中main函數(shù)怎樣調(diào)用類內(nèi)函數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語(yǔ)言基礎(chǔ)使用IDE快速開發(fā)的方法

    C語(yǔ)言基礎(chǔ)使用IDE快速開發(fā)的方法

    這篇文章主要介紹了C語(yǔ)言基礎(chǔ)使用IDE快速開發(fā)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • C++中STL容器的主要使用及含義說(shuō)明

    C++中STL容器的主要使用及含義說(shuō)明

    這篇文章主要介紹了C++中STL容器的主要使用及含義說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C/C++中命名空間(namespace)詳解及其作用介紹

    C/C++中命名空間(namespace)詳解及其作用介紹

    今天小編就為大家分享一篇關(guān)于C++命名空間namespace的介紹與使用,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2021-09-09
  • C語(yǔ)言使用四種方法初始化結(jié)構(gòu)體

    C語(yǔ)言使用四種方法初始化結(jié)構(gòu)體

    這篇文章說(shuō)明了什么是結(jié)構(gòu)體,介紹了結(jié)構(gòu)體的概念和使用優(yōu)點(diǎn),在C語(yǔ)言中如何使用和初始化結(jié)構(gòu)體方法,通過(guò)詳細(xì)的代碼展開進(jìn)行說(shuō)明,希望該篇文章對(duì)你有所幫助
    2021-06-06
  • C++代碼實(shí)現(xiàn)逆波蘭表達(dá)式

    C++代碼實(shí)現(xiàn)逆波蘭表達(dá)式

    這篇文章主要為大家詳細(xì)介紹了C++代碼實(shí)現(xiàn)逆波蘭表達(dá)式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11

最新評(píng)論