数据结构:顺序表与链表

1. 数据结构与算法基础

  • 程序构成:程序由数据结构与算法共同构成。其中,数据结构关注数据对象的组织与存储形式,算法则定义了对数据对象进行操作的具体方法。

  • 效率衡量

    • 时间复杂度:描述数据量增长与程序运行时间增长之间的函数关系,常用大O表示法,如O(1)、O(n)、O(n²)等。

    • 空间复杂度:描述数据量增长与程序所需存储空间增长之间的函数关系。

2. 数据结构的逻辑与存储结构

  • 逻辑结构

    • 线性结构:元素间为一对一关系。

    • 树形结构:元素间为一对多关系。

    • 图形结构:元素间为多对多关系。

  • 存储结构

    • 顺序存储:通过连续内存单元存储数据,支持高效随机访问,但插入、删除操作效率较低。

    • 链式存储:通过节点与指针动态组织数据,插入、删除效率高,但访问需遍历,且存在额外指针开销。

    • 索引存储与散列存储:适用于特定场景的高效存取方式。

3. 顺序表的实现

顺序表本质为动态分配的数组,在内存中连续存储。其基本操作包括创建与销毁。

关键代码说明:

  • CreateSeqlist:根据长度动态分配内存,返回指向该内存区域的首指针。

  • DestroySeqlist:接收二级指针,释放顺序表所占内存,并将指针置空,防止野指针。

seqlist.h

cpp 复制代码
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
typedef int DataType;
extern DataType *CreateSeqlist(int len);
extern void DestorySeqlist(DataType **pparray);
#endif

seqlist.c

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include "seqlist.h"
DataType *CreateSeqlist(int len)
{
DataType *pret = NULL;
pret = malloc(len * sizeof(DataType));
if (NULL == pret)
{
perror("fail to malloc");
return NULL;
}
return pret;
}
void DestorySeqlist(DataType **pparray)
{
free(*pparray);
*pparray = NULL;
return;
}

4. 链表的分类与基本操作

链表分为单向链表、双向链表与循环链表。以下结合笔记说明其核心操作:

单向链表的节点插入(头插法)步骤:

  1. 申请新节点内存空间;

  2. 将数据存入节点的Data域;

  3. 使新节点的pNext指向原头节点;

  4. 更新头指针指向新节点。

单向链表的节点删除步骤:

  1. 使用两个指针pPrepTmp,分别指向待删除节点的前驱与当前节点;

  2. 遍历链表,定位待删除节点;

  3. pPre->pNext指向pTmp->pNext,跳过待删除节点;

  4. 释放pTmp节点内存;

  5. 继续遍历或结束操作。

今日练习

1.封装函数实现单向链表的查找、修改: Node_t *FindLinkNode(Node_t *pHead, DataType TmpData); int ReplaceLinkNode(Node_t *pHead, DataType OldData, DataType NewData);

2.封装函数实现尾插法: int InsertTailLinkNode(Node_t *phead, DataType TmpData);

相关推荐
算法鑫探19 分钟前
算法与数据结构 以及算法复杂度
c语言·数据结构·算法·新人首发
迷途之人不知返24 分钟前
List的学习
数据结构·c++·学习·list
6Hzlia25 分钟前
【Hot 100 刷题计划】 LeetCode 23. 合并 K 个升序链表 | C++ 顺序合并
c++·leetcode·链表
啊哦呃咦唔鱼1 小时前
Leetcodehot100-215. 数组中的第K个最大元素
数据结构·算法·leetcode
苏渡苇1 小时前
Redis 核心数据结构(二)——List 与消息队列
数据结构·redis·list·redis发布订阅
shehuiyuelaiyuehao1 小时前
算法12,滑动窗口,将x减到0的最小操作数
java·数据结构·算法
6Hzlia1 小时前
【Hot 100 刷题计划】 LeetCode 19. 删除链表的倒数第 N 个结点 | C++ 双指针单趟遍历
c++·leetcode·链表
li星野1 小时前
链表通关八题:从反转链表到两数相加,手撕LeetCode高频题
数据结构·学习·leetcode·链表
流年如夢1 小时前
顺序表 -->增、删、查、改等详细操作
c语言·数据结构
wilbertzhou2 小时前
华为4A架构中的信息架构设计方法:从数据资源到战略资产的治理之道
数据结构·togaf·企业架构·4a架构