数据结构---顺序表---单链表

2024-08-28 02:04
文章标签 数据结构 顺序 单链

本文主要是介绍数据结构---顺序表---单链表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

目录

一、什么是程序?

 程序 = 数据结构 + 算法

二、一个程序释放优秀的两个标准 

2.1.时间复杂度

2.2.空间复杂度 

三、数据结构

3.1.数据结构间的关系

1.逻辑结构

1)线性关系

2)非线性关系

2.存储结构

1)顺序存储结构

2)链式存储结构

3)离散存储结构

4)索引存储结构

3.2.主要的数据结构

1.表

2.栈

3.队列

4.树

5.图 

四、顺序表

4.1.定义

 4.2.初始化申请空间

4.3.判断函数

​编辑 

4.4.尾添加

​编辑 

4.5.指定位置插入

​编辑 4.6.遍历

 4.7.删除

4.8.清空

​编辑 

4.8.销毁

​编辑   

五、单链表 

 六、总结


 

一、什么是程序?

 程序 = 数据结构 + 算法

二、一个程序释放优秀的两个标准 

2.1.时间复杂度

 时间复杂度:数据量增长与程序的执行时间的一种函数关系;

 时间复杂排序由小到大:O(c) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n);

2.2.空间复杂度 

空间复杂度:数据增长量与程序所占的空间的一种函数关系;

三、数据结构

3.1.数据结构间的关系

1.逻辑结构

1)线性关系

一对一----表

2)非线性关系

一对多---树

多对多---图 

2.存储结构

1)顺序存储结构
2)链式存储结构
3)离散存储结构
4)索引存储结构

3.2.主要的数据结构

1.表

2.栈

3.队列

4.树

5.图 

四、顺序表

4.1.定义

 这里以int为例子

 4.2.初始化申请空间

 

4.3.判断函数

 

4.4.尾添加

 

4.5.指定位置插入

注意:指定位置插入后,需要将该位置的往后的所有现有的向后移动 

 4.6.遍历

注意:很重要,里面的函数指针,用来操作查询到的数据的,可以用来查询和修改

 4.7.删除

4.8.清空

 

4.8.销毁

注意:销毁要释放空间 ,注意主函数

   

五、单链表 

#ifndef _LINKLIST__H_
#define _LINKLIST__H_typedef int DataType;typedef struct node
{DataType data;struct node *pnext;}LinkList;extern LinkList *CreateLinkList(void);
extern int HeadInsertLinkList(LinkList *phead, DataType data);
extern int TailInsertLinkList(LinkList *phead, DataType data);
extern int PrintLinkList(LinkList *phead);
extern int SelectLinkList(LinkList *phead, DataType data);
extern int UpdateLinkList(LinkList *phead, DataType olddata, DataType newdata);
extern int DeleteLinkList(LinkList *phead, DataType data);
extern int CleanLinkList(LinkList *phead);
extern int DestoryLinkList(LinkList *phead);#endif 
#include "linklist.h"
#include <stdio.h>
#include <stdlib.h>/* 创界一个含有头节点的单链表 */
LinkList *CreateLinkList(void)
{LinkList *phead = NULL;phead = malloc(sizeof(LinkList));if (phead == NULL){return NULL;}phead->pnext = NULL;return phead;
}/* 头插法 */
int HeadInsertLinkList(LinkList *phead, DataType data)
{LinkList *pnode = NULL;pnode = malloc(sizeof(LinkList));if (pnode == NULL){return 0;}pnode->data = data;pnode->pnext = phead->pnext;phead->pnext = pnode;return 0;}/* 尾插法 */
int TailInsertLinkList(LinkList *phead, DataType data)
{LinkList *pnode = NULL;LinkList *p = NULL;p = phead;pnode = malloc(sizeof(LinkList));if (pnode == NULL){return 0;}pnode->data = data;while (p->pnext != NULL){p++;}pnode->pnext = NULL;p->pnext = pnode;return 0;}/* 打印数据 */
int PrintLinkList(LinkList *phead)
{  LinkList *ptmp = NULL;if (phead->pnext == NULL){return -1;}ptmp = phead->pnext;while (ptmp != NULL){printf("%d ",ptmp->data);ptmp = ptmp->pnext;}printf("\n");return 0;}/* 查寻 */
int SelectLinkList(LinkList *phead, DataType data)
{LinkList *ptmp = NULL;if (phead->pnext == NULL){return -1;}ptmp = phead->pnext;while (ptmp != NULL){if (ptmp->data == data){printf("%d存在!\n", data);break;}ptmp = ptmp->pnext;}return 0;
}/* 修改 */
int UpdateLinkList(LinkList *phead, DataType olddata, DataType newdata)
{LinkList *ptmp = NULL;if (phead->pnext == NULL){return -1;}ptmp = phead->pnext;while (ptmp != NULL){if (ptmp->data == olddata){ptmp->data = newdata;break;}ptmp = ptmp->pnext;}return 0;
}/* 删除 */
int DeleteLinkList(LinkList *phead, DataType data)
{LinkList *ptmp = NULL;LinkList *qtmp = NULL;if (phead->pnext == NULL){return -1;}ptmp = phead->pnext;qtmp = phead;while (ptmp != NULL){if (ptmp->data == data){qtmp->pnext = ptmp->pnext;free(ptmp);break;}ptmp = ptmp->pnext;qtmp = qtmp->pnext;}return 0;
}/* 清空 */
int CleanLinkList(LinkList *phead)
{LinkList *ptmp = NULL;LinkList *qtmp = NULL;if (phead->pnext == NULL){return -1;}ptmp = phead->pnext;qtmp = phead->pnext;while (ptmp != NULL){ptmp = ptmp->pnext;free(qtmp);qtmp = ptmp;}phead->pnext = NULL;return 0;
}/* 销毁 */
int DestoryLinkList(LinkList *phead)
{LinkList *ptmp = NULL;LinkList *qtmp = NULL;if (phead->pnext == NULL){return -1;}ptmp = phead;qtmp = phead;while (ptmp != NULL){ptmp = ptmp->pnext;free(qtmp);qtmp = ptmp;}return 0;
}
#include "linklist.h"
#include <stdio.h>int main(void)
{LinkList *phead = NULL;phead = CreateLinkList();for (int i = 1; i < 10; i++){//HeadInsertLinkList(phead, i);TailInsertLinkList(phead, i);}PrintLinkList(phead);SelectLinkList(phead, 8);UpdateLinkList(phead, 8, 10);PrintLinkList(phead);DeleteLinkList(phead, 10);PrintLinkList(phead);CleanLinkList(phead);PrintLinkList(phead);DestoryLinkList(phead);return 0;
}

 六、总结

        顺序表和链表的区别很明显,链表空间地址不是连续的,顺序表空间地址是连续的;链表需要的空间大,但是理论上可以存储无限数据,而顺序表需要空间较小,存储的元素个数有限;顺序表访问元素比链表方便。

这篇关于数据结构---顺序表---单链表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1113420

相关文章

python 线程池顺序执行的方法实现

《python线程池顺序执行的方法实现》在Python中,线程池默认是并发执行任务的,但若需要实现任务的顺序执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录方案一:强制单线程(伪顺序执行)方案二:按提交顺序获取结果方案三:任务间依赖控制方案四:队列顺序消

redis数据结构之String详解

《redis数据结构之String详解》Redis以String为基础类型,因C字符串效率低、非二进制安全等问题,采用SDS动态字符串实现高效存储,通过RedisObject封装,支持多种编码方式(如... 目录一、为什么Redis选String作为基础类型?二、SDS底层数据结构三、RedisObject

Spring Bean初始化及@PostConstruc执行顺序示例详解

《SpringBean初始化及@PostConstruc执行顺序示例详解》本文给大家介绍SpringBean初始化及@PostConstruc执行顺序,本文通过实例代码给大家介绍的非常详细,对大家的... 目录1. Bean初始化执行顺序2. 成员变量初始化顺序2.1 普通Java类(非Spring环境)(

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

MySQL中SQL的执行顺序详解

《MySQL中SQL的执行顺序详解》:本文主要介绍MySQL中SQL的执行顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql中SQL的执行顺序SQL执行顺序MySQL的执行顺序SELECT语句定义SELECT语句执行顺序总结MySQL中SQL的执行顺序

SpringBoot中配置文件的加载顺序解读

《SpringBoot中配置文件的加载顺序解读》:本文主要介绍SpringBoot中配置文件的加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot配置文件的加载顺序1、命令⾏参数2、Java系统属性3、操作系统环境变量5、项目【外部】的ap

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio