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

詳解C語言之單鏈表

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

一、思路步驟

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

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

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

2.初始化

申請頭結(jié)點,并將其初始化為空

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

在這里插入圖片描述

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

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

c.返回size

4.插入

插入

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

5.刪除

刪除

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

b.找到要刪除位置的前一位,并判斷刪除位置是否正確、存在

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

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

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

二、代碼

#include <stdio.h>
#include <stdlib.h>
typedef int DataType;//給int起個別名,方便以后修改
typedef struct Node
{
	DataType data;//數(shù)據(jù)域
	struct Node *next;//指針域
}SLNode;
//初始化
void ListInit(SLNode **head)
{
	*head = (SLNode *)malloc(sizeof(SLNode));//申請頭結(jié)點
	(*head)->next = NULL;
}
//求當(dāng)前數(shù)據(jù)元素個數(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ù)位置錯誤!??!\n");
		return 0;
	}
	q = (SLNode *)malloc(sizeof(SLNode));//生成新結(jié)點
	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ù)錯誤?。?!\n");
		return 0;
	}
	q = p->next;
	*x = q->data;
	p->next = p->next->next;
	free(q);//釋放被刪除結(jié)點的內(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ù)錯誤!??!\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é)

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

相關(guān)文章

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

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

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

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

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

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

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

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

    C語言中的各種運算都是以字節(jié)的形式進行,在編寫很多系統(tǒng)程序時,如驅(qū)動程序、磁盤文件管理程序等,常要求將數(shù)據(jù)按位(bit)進行運算或者處理,下面這篇文章主要給大家介紹了關(guān)于C語言中位運算的相關(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ù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語言基礎(chǔ)使用IDE快速開發(fā)的方法

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

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

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

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

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

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

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

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

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

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

最新評論