当前位置: 首页 > news >正文

增加清晰度的网站app源码论坛

增加清晰度的网站,app源码论坛,网站建设实训周记,app调用网站目录 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. 链表的缺陷与优势&…

目录

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. 链表与顺序表比较

写在最后:


1. 顺序表的缺陷

为什么会有链表?

我们都有顺序表来存储数据了,

因为顺序表是有缺陷的:

1. 中间头部插入删除数据,需要挪动数据,效率低下。

2. 空间不够需要扩容,扩容会有一定的消耗,也可能会造成空间的浪费。

这时候,我们就要用到链表。

2. 单链表

链表是一种物理存储结构上非连续、非顺序的存储结构,

数据元素的逻辑顺序是通过链表中的指针链接次序实现的。

如下图: 

2.1 单链表的基本结构与接口函数

基本结构:

#pragma once#include <stdio.h>
#include <stdlib.h>
#include <assert.h>typedef int SLDataType;typedef struct SListNode
{SLDataType data;struct SListNode* next;
}SLNode;//打印链表
void SLPrint(SLNode* phead);//尾插
void SLPushBack(SLNode** pphead, SLDataType x);//头插
void SLPushFront(SLNode** pphead, SLDataType x);//尾删
void SLPopBack(SLNode** ppheadx);//头删
void SLPopFront(SLNode** pphead);//查找
SLNode* SLFind(SLNode* phead, SLDataType x);//插入
void SLInsert(SLNode** phead, SLNode* pos, SLDataType x);//删除
void SLErase(SLNode** phead, SLNode* pos);//从pos后面插入
void SLInsertAfter(SLNode* pos, SLDataType x);//从pos后面删除
void SLEraseAfter(SLNode* pos);

2.2 重要接口

创建新节点的函数:

//建立一个新节点(重复操作写成函数复用)
SLNode* BuyNewNode(SLDataType x)
{//malloc一个链表节点大小的空间SLNode* newnode = (SLNode*)malloc(sizeof(SLNode));//检查if (newnode == NULL){perror("malloc::fail");return;}//赋值newnode->data = x;newnode->next = NULL;return newnode;
}

2.2.1 尾插

//尾插
void SLPushBack(SLNode** pphead, SLDataType x)
{//检查二级指针pphead地址是否为空	//方便检查是否传空指针了assert(pphead);//创建节点SLNode* newnode = BuyNewNode(x);//如果链表为空if (*pphead == NULL){*pphead = newnode;}else//如果链表不为空{//找尾SLNode* tail = *pphead;while (tail->next != NULL){tail = tail->next;}//尾插tail->next = newnode;}
}

2.2.2 头插

//头插
void SLPushFront(SLNode** pphead, SLDataType x)
{//检查二级指针pphead地址是否为空	//方便检查是否传空指针了assert(pphead);//创建节点SLNode* newnode = BuyNewNode(x);//头插newnode->next = *pphead;*pphead = newnode;
}

2.2.3 尾删

//尾删
void SLPopBack(SLNode** pphead)
{//检查二级指针pphead地址是否为空	//方便检查是否传空指针了assert(pphead);//检查链表是否为空assert(*pphead);//头删的情况(链表只有一个数据)if ((*pphead)->next == NULL){free(*pphead);*pphead = NULL;}else{//找尾SLNode* tail = *pphead;while (tail->next->next != NULL){tail = tail->next;}//尾删free(tail->next);tail->next = NULL;}
}

2.2.4 头删

//头删
void SLPopFront(SLNode** pphead)
{//检查二级指针pphead地址是否为空	//方便检查是否传空指针了assert(pphead);//检查链表是否为空assert(*pphead);//头删SLNode* cur = (*pphead)->next;free(*pphead);*pphead = NULL;*pphead = cur;
}

2.2.5 查找

//查找
SLNode* SLFind(SLNode* phead, SLDataType x)
{//创建指针遍历链表SLNode* cur = phead;//查找while (cur){if (cur->data == x){return cur;}cur = cur->next;}return NULL;
}

2.2.6 插入

//插入
void SLInsert(SLNode** pphead, SLNode* pos, SLDataType x)
{//检查查找的地址是否为空assert(pos);//pos的位置if (pos == *pphead){SLPushFront(pphead, x);}else//在链表中间{SLNode* prev = *pphead;//查找pos对应位置while (prev->next != pos){prev = prev->next;}//插入SLNode* newnode = BuyNewNode(x);prev->next = newnode;newnode->next = pos;}
}

2.2.7 删除

//删除
void SLErase(SLNode** pphead, SLNode* pos)
{//检查二级指针pphead地址是否为空	//方便检查是否传空指针了assert(pphead);//检查查找的地址是否为空assert(pos);//检查链表是否为空(这里其实不断言也可以)assert(*pphead);//头删的情况if (*pphead == pos){SLPopFront(pphead);}else{//查找SLNode* prev = *pphead;while (prev->next != pos){prev = prev->next;}//删除prev->next = pos->next;free(pos);pos = NULL;}
}

2.2.8 从pos后面插入

//从pos后面插入
void SLInsertAfter(SLNode* pos, SLDataType x)
{//检查查找的地址是否为空assert(pos);//创建节点SLNode* newnode = BuyNewNode(x);//再pos后面插入newnode->next = pos->next;pos->next = newnode;
}

2.2.9 从pos后面删除

//从pos后面删除
void SLEraseAfter(SLNode* pos)
{//检查查找的地址和要删除的地址是否为空assert(pos);assert(pos->next);//在pos后面删除,prev记住要删除的节点,然后freeSLNode* prev = pos->next;pos->next = prev->next;free(pos->next);prev = NULL;
}

这就是单链表的基本框架和接口了,

如果感兴趣,你也可以使用接口函数玩一玩。

3. 链表的缺陷与优势:

但是链表是有缺陷的,

我们可以看到,

1. 链表想要访问一个节点,就得遍历链表,

2. 链表的尾删也需要遍历链表,

3. 而链表的优势是头删很方便是O(1)。

4. 链表与顺序表比较

我们就能跟顺序表比较一下,

1. 顺序表头插需要挪动数据是O(N),

2. 但是顺序表能随机访问。

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看。

http://www.yayakq.cn/news/37020/

相关文章:

  • 中小学学校网站建设网站建设教程参加苏州久远网络
  • 最牛的设计网站建设建设银行宁德分行网站
  • 长沙麓谷网站建设360提示危险的网站
  • 兴义做网站php网站用什么软件
  • 网站域名出售牛商网络
  • 百度网站建设电话销售话术关于网站建设的图片素材
  • 上海网站制作公司怎么找公司做两个网站有影响吗
  • 一起做业网站wordpress 变量
  • 福田网站建设联系电话个人创业怎样开公司
  • 个人网站建设简历专教做美食的网站
  • asp+网站开发中山做网站费用
  • 游戏开发比网站开发东莞网站建设哪里好
  • 网新企业网站管理系统网站建设好后能修改吗
  • 美丽乡村 网站建设网站维护需要关闭网站么
  • 瑞昌建站公司网站到期时间查询
  • 2核4g做网站吉林省建设厅网站二建管理系统
  • 网站点击量统计建设一个招聘网站的策划
  • 网站建设优化服务效果31省本土新增今天
  • 商城网站开发需要哪些人员装潢公司网站模板
  • 公司网站宣传保险网站建设方案
  • 西工网站建设设计广告投放是做什么的
  • 自适应营销网站长春网站推广排名
  • 滕州市做淘宝网站的北京宣传片制作公司
  • 西安网站建设服务seo在网站建设中的作用
  • 有什么网站可以做推广青岛网站seo
  • 做网站 请示学习软件大全
  • .net网站架设开网站需要投资多少钱
  • 企业网站展示论文网站制作企
  • 网页设计站点建设实验报告网站建设与维护新的体会
  • 网站建设需要c语言吗什么系统有wordpress