【海贼王的数据航海】链表—单链表

这篇具有很好参考价值的文章主要介绍了【海贼王的数据航海】链表—单链表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1 -> 链表

1.1 -> 链表的概念及结构

1.2 -> 链表的分类

2 -> 无头+单向+非循环链表(单链表)

2.1 -> 接口声明

2.2 -> 接口实现

2.2.1 -> 动态申请一个结点

2.2.2 -> 单链表的打印

2.2.3 -> 单链表的尾插

2.2.4 -> 单链表的头插

2.2.5 -> 单链表的尾删

2.2.6 -> 单链表的头删

2.2.7 -> 单链表的查找

2.2.8 -> 单链表在pos位置之前插入x

2.2.9 -> 单链表在pos位置之后插入x

2.2.10 -> 单链表删除pos位置的值

2.2.11 -> 单链表删除pos位置之后的值

2.3 -> 完整代码

2.3.1 -> SList.h

2.3.2 -> SList.c

2.3.3 -> Test.c


【海贼王的数据航海】链表—单链表,数据结构,链表,数据结构,开发语言,visualstudio,后端,c语言

1 -> 链表

1.1 -> 链表的概念及结构

概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。

现实中 数据结构中

【海贼王的数据航海】链表—单链表,数据结构,链表,数据结构,开发语言,visualstudio,后端,c语言

 注意:

  1. 上图可看出,链式结构在逻辑上是连续的,但是在物理上不一定连续;
  2. 现实中的结点一般都是从堆上申请出来的;
  3. 从堆上申请的空间,是按照一定策略分配的,两次申请的空间可能连续,也可能不连续。

假设在32位系统上,结点中值域为int类型,则一个节点的大小为8个字节,则也可能有以下链表:

【海贼王的数据航海】链表—单链表,数据结构,链表,数据结构,开发语言,visualstudio,后端,c语言

1.2 -> 链表的分类

实际中链表的结构非常多样,以下情况组合起来就有八种链表结构:

1. 单向或双向

【海贼王的数据航海】链表—单链表,数据结构,链表,数据结构,开发语言,visualstudio,后端,c语言

2. 带头或不带头

【海贼王的数据航海】链表—单链表,数据结构,链表,数据结构,开发语言,visualstudio,后端,c语言

3. 循环或非循环

【海贼王的数据航海】链表—单链表,数据结构,链表,数据结构,开发语言,visualstudio,后端,c语言

虽然有很多链表结构,但最常用的还是这两种:

1. 无头单向非循环链表

【海贼王的数据航海】链表—单链表,数据结构,链表,数据结构,开发语言,visualstudio,后端,c语言

2. 带头双向循环链表

【海贼王的数据航海】链表—单链表,数据结构,链表,数据结构,开发语言,visualstudio,后端,c语言

1. 无头单向非循环链表:结构简单,一般不会单独用来存储数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等。

2. 带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了。

2 -> 无头+单向+非循环链表(单链表)

2.1 -> 接口声明

#pragma once

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

// 无头+单向+非循环链表增删查改实现
typedef int SLTDateType;

typedef struct SLTNode
{
	SLTDateType data;
	struct SLTNode* next;
}SLTNode;

// 动态申请一个结点
SLTNode* BuySLTNode(SLTDateType x);

// 单链表打印
void SLTPrint(SLTNode* phead);

// 单链表尾插
void SLTPushBack(SLTNode** pphead, SLTDateType x);

// 单链表的头插
void SLTPushFront(SLTNode** pphead, SLTDateType x);

// 单链表的尾删
void SLTPopBack(SLTNode** pphead);

// 单链表头删
void SLTPopFront(SLTNode** pphead);

// 单链表查找
SLTNode* SLTFind(SLTNode* phead, SLTDateType x);

// 单链表在pos位置之前插入x
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDateType x);

// 单链表在pos位置之后插入x
void SLTInsertAfter(SLTNode* pos, SLTDateType x);

// 单链表删除pos位置的值
void SLTErase(SLTNode** pphead, SLTNode* pos);

// 单链表删除pos位置之后的值
void SLTEraseAfter(SLTNode* pos);

2.2 -> 接口实现

2.2.1 -> 动态申请一个结点

// 动态申请一个结点
SLTNode* BuySLTNode(SLTDateType x)
{
	SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
	if (newnode == NULL)
	{
		perror("malloc fail");
		return NULL;
	}

	newnode->data = x;
	newnode->next = NULL;

	return newnode;
}

2.2.2 -> 单链表的打印

// 单链表的打印
void SLTPrint(SLTNode* phead)
{
	SLTNode* cur = phead;
	while (cur != NULL)
	{
		printf("%d->", cur->data);
		cur = cur->next;
	}

	printf("NULL\n");
}

2.2.3 -> 单链表的尾插

// 单链表的尾插
void SLTPushBack(SLTNode** pphead, SLTDateType x)
{
	assert(pphead);
	SLTNode* newnode = BuySLTNode(x);
	if (*pphead == NULL)
	{
		 *pphead = newnode;
	}
	else
	{
		SLTNode* cur = *pphead;
		while (cur->next != NULL)
		{
			cur = cur->next;
		}
		cur->next = newnode;
	}
}
// 尾插测试
void SLTTest1()
{
	SLTNode* plist = NULL;

	SLTPushBack(&plist, 1);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 4);

	SLTPrint(plist);
}

【海贼王的数据航海】链表—单链表,数据结构,链表,数据结构,开发语言,visualstudio,后端,c语言

2.2.4 -> 单链表的头插

// 单链表的头插
void SLTPushFront(SLTNode** pphead, SLTDateType x)
{
	assert(pphead);
	SLTNode* newnode = BuySLTNode(x);

	newnode->next = *pphead;
	*pphead = newnode;
}
// 头插测试
void SLTTest2()
{
	SLTNode* plist = NULL;

	SLTPushFront(&plist, 1);
	SLTPushFront(&plist, 2);
	SLTPushFront(&plist, 3);
	SLTPushFront(&plist, 4);

	SLTPrint(plist);
}

【海贼王的数据航海】链表—单链表,数据结构,链表,数据结构,开发语言,visualstudio,后端,c语言

2.2.5 -> 单链表的尾删

// 单链表的尾删
void SLTPopBack(SLTNode** pphead)
{
	assert(pphead);
	assert(*pphead); // 暴力检查

	 温柔的检查
	//if (*pphead == NULL)
	//{
	//	return;
	//}

	// 只有一个节点
	if ((*pphead)->next == NULL)
	{
		free(*pphead);
		*pphead = NULL;
	}
	// 有多个节点
	else
	{
		SLTNode* prev = *pphead;
		SLTNode* tail = *pphead;
		while (tail->next != NULL)
		{
			prev = tail;
			tail = tail->next;
		}

		free(tail);
		tail = NULL;

		prev->next = NULL;
	}
}
// 尾删测试
void SLTTest3()
{
	SLTNode* plist = NULL;

	SLTPushBack(&plist, 1);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 4);
	SLTPrint(plist);

	SLTPopBack(&plist);
	SLTPrint(plist);
	SLTPopBack(&plist);
	SLTPrint(plist);
	SLTPopBack(&plist);
	SLTPrint(plist);
	SLTPopBack(&plist);
	SLTPrint(plist);
}

【海贼王的数据航海】链表—单链表,数据结构,链表,数据结构,开发语言,visualstudio,后端,c语言

2.2.6 -> 单链表的头删

// 单链表的头删
void SLTPopFront(SLTNode** pphead)
{
	assert(*pphead);
	SLTNode* tail = *pphead;

	*pphead = (*pphead)->next;
	free(tail);
	tail = NULL;
}
// 头删测试
void SLTTest4()
{
	SLTNode* plist = NULL;

	SLTPushBack(&plist, 1);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 4);
	SLTPrint(plist);

	SLTPopFront(&plist);
	SLTPrint(plist);
	SLTPopFront(&plist);
	SLTPrint(plist);
	SLTPopFront(&plist);
	SLTPrint(plist);
	SLTPopFront(&plist);
	SLTPrint(plist);
}

【海贼王的数据航海】链表—单链表,数据结构,链表,数据结构,开发语言,visualstudio,后端,c语言

2.2.7 -> 单链表的查找

// 单链表的查找
SLTNode* SLTFind(SLTNode* phead, SLTDateType x)
{
	SLTNode* ptr = phead;
	while (ptr->next != NULL)
	{
		if (ptr->data == x)
		{
			return ptr;
		}
		else
		{
			ptr = ptr->next;
		}
	}

	return NULL;
}
// 查找测试
void SLTTest5()
{
	SLTNode* plist = NULL;

	SLTPushBack(&plist, 1);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 4);
	SLTPrint(plist);

	SLTNode* ans = SLTFind(plist, 1);
	if (ans)
		ans->data = 10;
	SLTPrint(plist);
}

【海贼王的数据航海】链表—单链表,数据结构,链表,数据结构,开发语言,visualstudio,后端,c语言

2.2.8 -> 单链表在pos位置之前插入x

// 单链表在pos位置之前插入x
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDateType x)
{
	assert(pphead);
	assert(pos);
	if (pos == *pphead)
	{
		SLTPushFront(pphead, x);
	}
	else
	{
		SLTNode* newnode = BuySLTNode(x);
		SLTNode* prev = *pphead;
		while (prev->next != pos)
		{
			prev = prev->next;
		}

		prev->next = newnode;
		newnode->next = pos;
	}
}
// 在pos位置之前插入x测试
void SLTTest6()
{
	SLTNode* plist = NULL;

	SLTPushBack(&plist, 1);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 4);
	SLTPrint(plist);

	SLTNode* pos = SLTFind(plist, 2);
	if (pos)
		SLTInsert(&plist, pos, 99);
	SLTPrint(plist);
}

【海贼王的数据航海】链表—单链表,数据结构,链表,数据结构,开发语言,visualstudio,后端,c语言

2.2.9 -> 单链表在pos位置之后插入x

// 单链表在pos位置之后插入x
void SLTInsertAfter(SLTNode* pos, SLTDateType x)
{
	assert(pos);
	SLTNode* newnode = BuySLTNode(x);
	SLTNode* tmp = pos->next;

	pos->next = newnode;
	newnode->next = tmp;
}
// 在pos位置之后插入x测试
void SLTTest7()
{
	SLTNode* plist = NULL;

	SLTPushBack(&plist, 1);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 4);
	SLTPrint(plist);

	SLTNode* pos = SLTFind(plist, 2);
	if (pos)
		SLTInsertAfter(pos, 99);
	SLTPrint(plist);
}

【海贼王的数据航海】链表—单链表,数据结构,链表,数据结构,开发语言,visualstudio,后端,c语言

2.2.10 -> 单链表删除pos位置的值

// 单链表删除pos位置的值
void SLTErase(SLTNode** pphead, SLTNode* pos)
{
	assert(pphead);
	assert(*pphead);
	assert(pos);
	if (pos == *pphead)
	{
		SLTPopFront(pphead);
	}
	else
	{
		SLTNode* prev = *pphead;
		if (prev->next != pos)
		{
			prev = prev->next;
		}

		prev->next = pos->next;
		free(pos);
		pos = NULL;
	}
}
// 删除pos位置的值测试
void SLTTest8()
{
	SLTNode* plist = NULL;

	SLTPushBack(&plist, 1);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 4);
	SLTPrint(plist);

	SLTNode* pos = SLTFind(plist, 2);
	if (pos)
		SLTErase(&plist, pos);
	SLTPrint(plist);
}

【海贼王的数据航海】链表—单链表,数据结构,链表,数据结构,开发语言,visualstudio,后端,c语言

2.2.11 -> 单链表删除pos位置之后的值

// 单链表删除pos位置之后的值
void SLTEraseAfter(SLTNode* pos)
{
	assert(pos);
	assert(pos->next);
	SLTNode* tmp = pos->next->next;

	free(pos->next);
	pos->next = tmp;
}
// 删除pos位置之后的值测试
void SLTTest9()
{
	SLTNode* plist = NULL;

	SLTPushBack(&plist, 1);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 4);
	SLTPrint(plist);

	SLTNode* pos = SLTFind(plist, 2);
	if (pos)
		SLTEraseAfter(pos);
	SLTPrint(plist);
}

【海贼王的数据航海】链表—单链表,数据结构,链表,数据结构,开发语言,visualstudio,后端,c语言

2.3 -> 完整代码

2.3.1 -> SList.h

#pragma once

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

// 无头+单向+非循环链表增删查改实现
typedef int SLTDateType;

typedef struct SLTNode
{
	SLTDateType data;
	struct SLTNode* next;
}SLTNode;

// 动态申请一个结点
SLTNode* BuySLTNode(SLTDateType x);

// 单链表打印
void SLTPrint(SLTNode* phead);

// 单链表尾插
void SLTPushBack(SLTNode** pphead, SLTDateType x);

// 单链表的头插
void SLTPushFront(SLTNode** pphead, SLTDateType x);

// 单链表的尾删
void SLTPopBack(SLTNode** pphead);

// 单链表头删
void SLTPopFront(SLTNode** pphead);

// 单链表查找
SLTNode* SLTFind(SLTNode* phead, SLTDateType x);

// 单链表在pos位置之前插入x
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDateType x);

// 单链表在pos位置之后插入x
void SLTInsertAfter(SLTNode* pos, SLTDateType x);

// 单链表删除pos位置的值
void SLTErase(SLTNode** pphead, SLTNode* pos);

// 单链表删除pos位置之后的值
void SLTEraseAfter(SLTNode* pos);

2.3.2 -> SList.c

#include "SList.h"

// 动态申请一个结点
SLTNode* BuySLTNode(SLTDateType x)
{
	SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
	if (newnode == NULL)
	{
		perror("malloc fail");
		return NULL;
	}

	newnode->data = x;
	newnode->next = NULL;

	return newnode;
}

// 单链表的打印
void SLTPrint(SLTNode* phead)
{
	SLTNode* cur = phead;
	while (cur != NULL)
	{
		printf("%d->", cur->data);
		cur = cur->next;
	}

	printf("NULL\n");
}

// 单链表的尾插
void SLTPushBack(SLTNode** pphead, SLTDateType x)
{
	assert(pphead);
	SLTNode* newnode = BuySLTNode(x);
	if (*pphead == NULL)
	{
		 *pphead = newnode;
	}
	else
	{
		SLTNode* cur = *pphead;
		while (cur->next != NULL)
		{
			cur = cur->next;
		}
		cur->next = newnode;
	}
}

// 单链表的头插
void SLTPushFront(SLTNode** pphead, SLTDateType x)
{
	assert(pphead);
	SLTNode* newnode = BuySLTNode(x);

	newnode->next = *pphead;
	*pphead = newnode;
}

// 单链表的尾删
void SLTPopBack(SLTNode** pphead)
{
	assert(pphead);
	assert(*pphead); // 暴力检查

	 温柔的检查
	//if (*pphead == NULL)
	//{
	//	return;
	//}

	// 只有一个节点
	if ((*pphead)->next == NULL)
	{
		free(*pphead);
		*pphead = NULL;
	}
	// 有多个节点
	else
	{
		SLTNode* prev = *pphead;
		SLTNode* tail = *pphead;
		while (tail->next != NULL)
		{
			prev = tail;
			tail = tail->next;
		}

		free(tail);
		tail = NULL;

		prev->next = NULL;
	}
}

// 单链表的头删
void SLTPopFront(SLTNode** pphead)
{
	assert(*pphead);
	SLTNode* tail = *pphead;

	*pphead = (*pphead)->next;
	free(tail);
	tail = NULL;
}

// 单链表的查找
SLTNode* SLTFind(SLTNode* phead, SLTDateType x)
{
	SLTNode* ptr = phead;
	while (ptr->next != NULL)
	{
		if (ptr->data == x)
		{
			return ptr;
		}
		else
		{
			ptr = ptr->next;
		}
	}

	return NULL;
}

// 单链表在pos位置之前插入x
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDateType x)
{
	assert(pphead);
	assert(pos);
	if (pos == *pphead)
	{
		SLTPushFront(pphead, x);
	}
	else
	{
		SLTNode* newnode = BuySLTNode(x);
		SLTNode* prev = *pphead;
		while (prev->next != pos)
		{
			prev = prev->next;
		}

		prev->next = newnode;
		newnode->next = pos;
	}
}

// 单链表在pos位置之后插入x
void SLTInsertAfter(SLTNode* pos, SLTDateType x)
{
	assert(pos);
	SLTNode* newnode = BuySLTNode(x);
	SLTNode* tmp = pos->next;

	pos->next = newnode;
	newnode->next = tmp;
}

// 单链表删除pos位置的值
void SLTErase(SLTNode** pphead, SLTNode* pos)
{
	assert(pphead);
	assert(*pphead);
	assert(pos);
	if (pos == *pphead)
	{
		SLTPopFront(pphead);
	}
	else
	{
		SLTNode* prev = *pphead;
		if (prev->next != pos)
		{
			prev = prev->next;
		}

		prev->next = pos->next;
		free(pos);
		pos = NULL;
	}
}

// 单链表删除pos位置之后的值
void SLTEraseAfter(SLTNode* pos)
{
	assert(pos);
	assert(pos->next);
	SLTNode* tmp = pos->next->next;

	free(pos->next);
	pos->next = tmp;
}

2.3.3 -> Test.c

#include "SList.h"

// 尾插测试
void SLTTest1()
{
	SLTNode* plist = NULL;

	SLTPushBack(&plist, 1);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 4);

	SLTPrint(plist);
}

// 头插测试
void SLTTest2()
{
	SLTNode* plist = NULL;

	SLTPushFront(&plist, 1);
	SLTPushFront(&plist, 2);
	SLTPushFront(&plist, 3);
	SLTPushFront(&plist, 4);

	SLTPrint(plist);
}

// 尾删测试
void SLTTest3()
{
	SLTNode* plist = NULL;

	SLTPushBack(&plist, 1);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 4);
	SLTPrint(plist);

	SLTPopBack(&plist);
	SLTPrint(plist);
	SLTPopBack(&plist);
	SLTPrint(plist);
	SLTPopBack(&plist);
	SLTPrint(plist);
	SLTPopBack(&plist);
	SLTPrint(plist);
}

// 头删测试
void SLTTest4()
{
	SLTNode* plist = NULL;

	SLTPushBack(&plist, 1);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 4);
	SLTPrint(plist);

	SLTPopFront(&plist);
	SLTPrint(plist);
	SLTPopFront(&plist);
	SLTPrint(plist);
	SLTPopFront(&plist);
	SLTPrint(plist);
	SLTPopFront(&plist);
	SLTPrint(plist);
}

// 查找测试
void SLTTest5()
{
	SLTNode* plist = NULL;

	SLTPushBack(&plist, 1);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 4);
	SLTPrint(plist);

	SLTNode* ans = SLTFind(plist, 1);
	if (ans)
		ans->data = 10;
	SLTPrint(plist);
}

// 在pos位置之前插入x测试
void SLTTest6()
{
	SLTNode* plist = NULL;

	SLTPushBack(&plist, 1);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 4);
	SLTPrint(plist);

	SLTNode* pos = SLTFind(plist, 2);
	if (pos)
		SLTInsert(&plist, pos, 99);
	SLTPrint(plist);
}

// 在pos位置之后插入x测试
void SLTTest7()
{
	SLTNode* plist = NULL;

	SLTPushBack(&plist, 1);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 4);
	SLTPrint(plist);

	SLTNode* pos = SLTFind(plist, 2);
	if (pos)
		SLTInsertAfter(pos, 99);
	SLTPrint(plist);
}

// 删除pos位置的值测试
void SLTTest8()
{
	SLTNode* plist = NULL;

	SLTPushBack(&plist, 1);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 4);
	SLTPrint(plist);

	SLTNode* pos = SLTFind(plist, 2);
	if (pos)
		SLTErase(&plist, pos);
	SLTPrint(plist);
}

// 删除pos位置之后的值测试
void SLTTest9()
{
	SLTNode* plist = NULL;

	SLTPushBack(&plist, 1);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 4);
	SLTPrint(plist);

	SLTNode* pos = SLTFind(plist, 2);
	if (pos)
		SLTEraseAfter(pos);
	SLTPrint(plist);
}

int main()
{



	return 0;
}

感谢大佬们的支持!!!

互三啦!!!文章来源地址https://www.toymoban.com/news/detail-840106.html

到了这里,关于【海贼王的数据航海】链表—单链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【海贼王的数据航海】排序——直接选择排序|堆排序

    目录 1 - 选择排序 1.1 - 基本思想 1.2 - 直接选择排序 1.2.1 - 代码实现 1.3 - 堆排序 1.3.1 - 代码实现 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 在元素集合arr[i] -- arr[n - 1]中选择关键码最大(或最小)的数据

    2024年03月19日
    浏览(22)
  • 【海贼王的数据航海】排序——概念|直接插入排序|希尔排序

    目录 1 - 排序的概念及其运用 1.1 - 排序的概念 1.2 - 常见的排序算法 2 - 插入排序 2.1 - 基本思想 2.2 - 直接插入排序 2.2.1 - 代码实现 2.3 - 希尔排序(缩小增量排序) 2.3.1 - 代码实现 排序 :所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的

    2024年03月25日
    浏览(28)
  • 【海贼王的数据航海】时间复杂度 | 空间复杂度

    目录 1 - 算法效率 1.1 - 如何衡量一个算法的好坏? 1.2 - 算法的复杂度 2 - 时间复杂度 2.1 - 时间复杂度的概念 2.2 - 大O的渐进表示法 2.3 - 常见时间复杂度计算 3 - 空间复杂度 4 - 常见复杂度对比 对于以下斐波那契数列: 用递归实现斐波那契数列,看上去代码十分简洁,但简洁一

    2024年03月14日
    浏览(33)
  • 大学生bootstrap框架网页作业成品 web前端大作业期末源码 航海王html+jquery+bootstrap响应式网页制作模板 学生海贼王动漫bootstrap框架网站作品

    HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐👇🏻👇🏻👇🏻 ❤ 【作者主页

    2024年02月11日
    浏览(51)
  • 数据结构-链表-单链表(3)

    目录 1. 顺序表的缺陷 2. 单链表 2.1 单链表的基本结构与接口函数 2.2 重要接口 创建新节点的函数: 2.2.1 尾插 2.2.2 头插 2.2.3 尾删 2.2.4 头删 2.2.5 查找 2.2.6 插入 2.2.7 删除 2.2.8 从pos后面插入 2.2.9 从pos后面删除 3. 链表的缺陷与优势: 4. 链表与顺序表比较 写在最后: 为什么

    2024年01月17日
    浏览(30)
  • 【数据结构】- 链表之单链表(下)

    未来藏在迷雾中 叫人看来胆怯 带你踏足其中 就会云开雾散 本章是关于数据结构中的链表之单链表(下) 提示:以下是本篇文章正文内容,下面案例可供参考 1.2.1 在pos位置插入(也就是pos位置之前) 流程图 多个节点 一个节点 1.2.2 在pos位置之后插入 流程图: 注意: 下面这种写

    2023年04月23日
    浏览(42)
  • [数据结构]链表之单链表(详解)

    在学习 链表 之前,我们已经学习了 顺序表 了 根据 顺序表 的特点,我们可以发现 顺序表 有优点,也有一些缺陷。 所以根据 顺序表 的缺点,链表就横空出世啦~ **概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次

    2023年04月08日
    浏览(34)
  • 【数据结构】-- 单链表 vs 双向链表

    🌈 个人主页: 白子寰 🔥 分类专栏: python从入门到精通,魔法指针,进阶C++,C语言,C语言题集,C语言实现游戏 👈 希望得到您的订阅和支持~ 💡 坚持创作博文(平均质量分82+),分享更多关于深度学习、C/C++,python领域的优质内容!(希望得到您的关注~)  目录  单链表和

    2024年04月17日
    浏览(24)
  • 数据结构入门 — 链表详解_单链表

    数据结构入门 — 单链表详解 * 博客主页链接:https://blog.csdn.net/m0_74014525 关注博主,后期持续更新系列文章 文章末尾有源码 *****感谢观看,希望对你有所帮助***** 第一篇:数据结构入门 — 链表详解_单链表 第二篇:数据结构入门 — 链表详解_双向链表 第三篇:数据结构入门

    2024年02月11日
    浏览(36)
  • <数据结构> 链表 - 单链表(c语言实现)

    哨兵位结点也叫哑节点。哨兵位结点 也是头结点 。该节点 不存储有效数据,只是为了方便操作 (如尾插时用带哨兵位的头结点很爽,不需要判空)。 有哨兵位结点的链表,第一个元素应该是链表第二个节点(head - next,head为哨兵位结点)对应的元素。 有哨兵位结点的链表

    2023年04月11日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包