最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解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)文章

最新評(píng)論

桂阳县| 乌鲁木齐市| 安陆市| 九龙县| 通渭县| 嵊州市| 资溪县| 聂拉木县| 马尔康县| 交城县| 班戈县| 天津市| 梅州市| 咸宁市| 松潘县| 麻栗坡县| 大安市| 博客| 肃北| 伊金霍洛旗| 泗水县| 南康市| 大埔区| 温宿县| 阳朔县| 江城| 文昌市| 义马市| 南昌县| 岳阳县| 砀山县| 许昌县| 高阳县| 金川县| 腾冲县| 南陵县| 遵义县| 增城市| 彝良县| 西城区| 武鸣县|