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

资阳房产网站建设东莞核酸检测时间

资阳房产网站建设,东莞核酸检测时间,wordpress 后台美化,全景地图网站开发1. 概念 链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 2. 单链表的结构 单链表是由一系列节点组成的线性结构,每个结点包含两个域。:数据域和指针域。 数据域用来…

1. 概念

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

2. 单链表的结构

单链表是由一系列节点组成的线性结构,每个结点包含两个域。:数据域和指针域。

数据域用来存储数据,指针域用来存储下一个结点的指针。单链表的头结点指向第一个结点,最后一个结点的指针域为空。

一个结点的结构:

逻辑结构:为了方便形象理解,想象出来的。

物理结构:实际内存中,真实的样子。

1.3 单链表的优缺点

优点:

1. 插入和删除操作效率高(只需修改指针的指向)

2. 空间利用率高(不需要预先分配空间)

3. 长度可变

缺点:

1. 随机访问效率低(只能挨个遍历)

2. 存储空间浪费(每个结点包含数据和指针)

3. 链接信息的丢失 (无法访问前一个节点)

2. 单链表的实现

单链表各接口函数

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int SLTDataType;//这样做的目的是为了增加代码的可读性和可维护性,以及提高代码的可移植性,
//因为如果将来需要更改 SLTDataType 的类型,只需要在 typedef 语句中修改一处即可,
// 如果我们在程序的其他地方需要修改 SLTDataType 的类型,
//只需在 typedef 语句中修改 int 为其他类型即可,不需要修改其他代码。
//typedef int SLTADataType;typedef struct SListNode //--single Linked List
{SLTDataType data;//成员变量struct SListNode* next;
}SLTNode;void SLTPrint(SLTNode* phead);
void SLPushFront(SLTNode** pphead, SLTDataType x);//头部插入
void SLPushBack(SLTNode** pphead, SLTDataType x);//尾部插入void SLPopFront(SLTNode** pphead);//头部删除
void SLPopBack(SLTNode** pphead);//尾部删除//单链表查找
SLTNode* STFind(SLTNode* phead, SLTDataType x);//单链表pos之前插入
void SLInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x);
//单链表pos之后插入
void SLInsertAfter(SLTNode* pos, SLTDataType x);
//单链表pos位置删除
void SLErase(SLTNode** pphead, SLTNode* pos);
//单链表pos之后删除
void SLEraseAfter(SLTNode* phead);

2.1 结点的定义

单链表的英文为:Single linked list --简写为SL

而顺序表的英文是:Sequence table -- 简写为Seq

结点的英文为:node

typedef int SLTDataType;
typedef struct SListNode //--single Linked List
{SLTDataType data;//成员变量struct SListNode* next;
}SLTNode;

2.2 链表的打印

//函数的作用是遍历单链表,并将每个节点的数据元素打印到屏幕上。
void SLTPrint(SLTNode* phead)//参数是一个指向 SLTNode 类型的指针 phead,表示单链表的头节点。
{SLTNode* cur = phead;//头结点存储的地址给cur指针。while (cur != NULL)//使用一个while循环对单链表进行遍历,循环条件为 cur 不为 NULL。{    		printf("%d->", cur->data);cur = cur->next;}printf("NULL\n");
}

2.3 创建一个新节点

SLTNode* BuyLTNode(SLTDataType x)//表示要创建的节点的数据元素。
//函数的作用是创建一个新的单链表节点,并将其初始化为包含数据元素 x 的节点。
{ SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));if (newnode == NULL){perror("malloc fail");return NULL;}newnode->data = x;newnode->next = NULL;return newnode;//返回的是一个结点的地址
}

2.4 单链表尾插

void SLPushBack(SLTNode** pphead, SLTDataType x)//尾插的本质是让上一个结点链接下一个结点
{SLTNode* newnode = BuyLTNode(x);// 1、空链表// 2、非空链表if (*pphead == NULL){*pphead = newnode;}else{SLTNode* tail = *pphead;while (tail->next != NULL){tail = tail->next;}tail->next = newnode;}}

2.5 单链表头插

void SLPushFront(SLTNode** pphead, SLTDataType x)
{SLTNode* newnode = BuyLTNode(x);newnode->next = *pphead;*pphead = newnode;
}

2.6 单链表头删

void SPopFront(SLTNode** pphead)
{//没有节点//暴力检查assert(*pphead);if ((*pphead)->next == NULL){free(*pphead);*pphead = NULL;}//多个节点else{SLTNode* del = *pphead;//相当于一个标记,删掉的标记//写法一//*pphead = del->next;//写法二 *pphead = (*pphead)->next;free(del);}}

2.7 单链表尾删

void SLPopBack(SLTNode** pphead)
{//没有节点(空链表)//暴力检查assert(*pphead);//一个节点if ((*pphead)->next == NULL){free(*pphead);*pphead = NULL;}//多个节点else{SLTNode* prev = NULL;SLTNode* tail = *pphead;//找尾//方法一/*while (tail->next){prev = tail;tail = tail->next;}free(tail);prev->next = NULL;*///方法二SLTNode* tail = *pphead;while (tail->next->next){tail = tail->next;}free(tail->next);tail->next = NULL;}
}

2.8 单链表查找/修改某个值

SLTNode* STFind(SLTNode* phead, SLTDataType x)
{//assert(phead);SLTNode* cur = phead;while (cur){if (cur->data == x){return cur;}cur = cur->next;}return NULL;
}

2.9 单链表在pos之前插入

void SLInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x)
{assert(pphead);//&plistassert(pos);//assert(*pphead);//一个节点if (*pphead == NULL){SLPushFront(pphead, x);}else//多个节点{SLTNode* prev = *pphead;while (prev->next != pos){prev = prev->next;}SLTNode* newnode = BuyLTNode(x);prev->next = newnode;newnode->next = pos;}
}

2.10 单链表在pos之后插入

void SLInsertAfter(SLTNode* pos, SLTDataType x)
{assert(pos);SLTNode* newnode = BuyLTNode(x);newnode->next = pos->next;pos->next = newnode;
}

2.11 单链表删除pos的值

void SLErase(SLTNode** pphead, SLTNode* pos)
{assert(pphead);assert(pos);if (pos == *pphead){SLPopFront(pphead);}else{SLTNode* prev = *pphead;while (prev->next!=pos){prev = prev->next;}prev->next = pos->next;free(pos);}
}

2.12 单链表删除pos之后的值

void SLEraseAfter(SLTNode* pos)
{assert(pos);SLTNode* next= pos->next;pos->next = next->next;free(next);
}


文章转载自:

http://rA6ZgTZD.wtcyz.cn
http://xPwKmoBE.wtcyz.cn
http://IGcyvFUF.wtcyz.cn
http://RbACxmHC.wtcyz.cn
http://C67C8XEs.wtcyz.cn
http://OjGOH6Hg.wtcyz.cn
http://NqXR5rJ4.wtcyz.cn
http://B5TD4IUG.wtcyz.cn
http://OYx0MiWh.wtcyz.cn
http://4b15cY8E.wtcyz.cn
http://c815SpLc.wtcyz.cn
http://PKnGT4q0.wtcyz.cn
http://zrXzIPkO.wtcyz.cn
http://9nPc7Q1h.wtcyz.cn
http://3y3iHcqA.wtcyz.cn
http://5n6cma1i.wtcyz.cn
http://Cnx5WPth.wtcyz.cn
http://5VniU4Fc.wtcyz.cn
http://W124MKxp.wtcyz.cn
http://0PLYYfpH.wtcyz.cn
http://8ULiEEFu.wtcyz.cn
http://MxapX1K1.wtcyz.cn
http://wGYNHjzw.wtcyz.cn
http://aV0vA7AH.wtcyz.cn
http://1MITTqfm.wtcyz.cn
http://Cgc05Vbz.wtcyz.cn
http://2FiomYht.wtcyz.cn
http://T5RLvs0g.wtcyz.cn
http://ijE4MWzo.wtcyz.cn
http://KndRN3KJ.wtcyz.cn
http://www.dtcms.com/wzjs/728834.html

相关文章:

  • asp.net 开发网站开发长沙小程序公司
  • 网站制作的核心要点是什么erp系统软件有哪些
  • 继电器做网站东莞大型企业网站建设
  • 网站设计软件开发网站建设课程报告
  • 做网站的无锡英文版企业网站布局设计
  • 国外哪些网站可以注册域名尚层装饰官网
  • 郑州自助建站模板如何建设高等数学课程网站
  • 宿州网站开发公司宁波seo排名方案优化
  • 宜春市网站建设大连市城市建设投资集团网站
  • 什么是静态网站小程序开发平台找哪家好
  • 长春网站设计价格阿里巴巴网官网首页
  • 网站建设与维护成绩查询itme收录优美图片官网
  • 万云网络网站seo是什么意思为什么要做seo
  • 百度和阿里哪个厉害做网站宝安住房和建设局网站电话
  • 上海市城乡住房建设厅网站网站建设分哪些类别
  • 山东舜玉建设工程有限公司网站网站设计方案模板
  • 网站域名到期会怎么样做猎头顾问 经常看哪些网站
  • 手机网站怎么优化广州专业网站设计定制
  • 郑州网站优化顾问汽车网站建设开题报告
  • 建站域名哪个网站做任务可以赚钱
  • 国外有哪做交互设计网站网站建设技术服务清单
  • 杭州网站设计制作江苏个人备案网站内容
  • 建设高端网站大连网站制作培训
  • 便宜的网站建设公司网站的目标定位有哪些
  • 网站建设 seo哈工大 网站开发
  • 网站后台管理的超链接怎么做合肥百度团购网站建设
  • 服务器方面如何规划建设网站做文案的网站
  • 大讲堂123专注网站模板制作网站首页建设中页面
  • 畜牧业网站模板网络下载的网站模板能直接上传到虚拟主机
  • 怎么做好推广和营销网站内链怎么优化