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

网站长春网站建设深圳电子网络推广查询

网站长春网站建设,深圳电子网络推广查询,十大国外室内设计网站,盘锦网站建设公司文章内容 1. 链表的概念及结构 2. 链表的分类 3.链表实现 4.代码 文章目录 1. 链表的概念及结构 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表 中的指针链接次序实现的 。 现实中 数据结构中 链表和顺序表…

文章内容

1. 链表的概念及结构

2. 链表的分类

3.链表实现

4.代码


文章目录

1. 链表的概念及结构

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

 

 现实中 数据结构中

 链表和顺序表的区别

 

2. 链表的分类

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

 2.1单向或者双向

 2.2 带头或者不带头

 2.3循环或者非循环

 虽然有这么多的链表的结构,但是我们实际中最常用还是两种结构:

 1. 无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结
构的子结构,如哈希桶图的邻接表等等。另外这种结构在笔试面试中出现很多。


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

3.链表实现

3.1无头单向非循环单链表
1.主要功能

 2.接口实现

 

 

 

 

 

 

 

 

 

 

 

 

 以上就是链表每个接口的实现了!!!!

3.2带头双向循环链表
1.主要功能

在理解单链表的基础上,理解带头双向循环链表就简单很多了;

2.接口实现

 

 

 

 

 

 

 

 

 

 

 4.代码

 1.单链表
#pragma once#include <stdio.h>
#include <stdlib.h>
#include <assert.h>typedef int SLDataType;
typedef struct SListNode
{SLDataType data;struct SListNode* next;
}SLTNode;//打印链表
void SLTPrint(SLTNode* phead);//创建一个新节点
SLTNode* BuySListNode(SLDataType x);//尾插
void SLTPushBack(SLTNode** pphead, SLDataType x);//头插
void SLTPushFront(SLTNode** pphead, SLDataType x);//尾删
void SLTPopBack(SLTNode** pphead);//头删
void SLTPopFront(SLTNode** pphead);//寻找
SLTNode* SLTFind(SLTNode* phead, SLDataType x);// 在pos之前插入x
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLDataType x);// 在pos以后插入x
void SLTInsertAfter(SLTNode* pos, SLDataType x);// 删除pos位置
void SLTErase(SLTNode** pphead, SLTNode* pos);// 删除pos的后一个位置
void SLTEraseAfter(SLTNode* pos);//销毁链表
void SLTDestroy(SLTNode** pphead);
#define _CRT_SECURE_NO_WARNINGS 1#include "SList.h"//打印链表
void SLTPrint(SLTNode* phead)
{SLTNode* cur = phead;while (cur){printf("%d->", cur->data);cur = cur->next;}printf("NULL\n");
}//创建一个新节点
SLTNode* BuySListNode(SLDataType x)
{SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));if (newnode == NULL){perror("BuySListNode fail");exit(-1);}newnode->data = x;newnode->next = NULL;return newnode;
}//尾插
void SLTPushBack(SLTNode** pphead, SLDataType x)
{SLTNode* newnode = BuySListNode(x);if (*pphead == NULL){//改变指向结构体的指针,所以要用二级指针*pphead = newnode;}else{SLTNode* tail = *pphead;while (tail->next != NULL){tail = tail->next;}//改变结构体,用结构体指针tail->next = newnode;}
}//头插
void SLTPushFront(SLTNode** pphead, SLDataType x)
{SLTNode* newnode = BuySListNode(x);newnode->next = *pphead;*pphead = newnode;}//尾删
void SLTPopBack(SLTNode** pphead)
{//空assert(*pphead);//一个节点if ((*pphead)->next == NULL){free(*pphead);*pphead = NULL;}//一个以上节点SLTNode* tail = *pphead;while (tail->next->next != NULL){tail = tail->next;}free(tail->next);tail->next = NULL;}//头删
void SLTPopFront(SLTNode** pphead)
{//kongassert(*pphead);//非空SLTNode* newnode = (*pphead)->next;free(*pphead);*pphead = newnode;}//寻找
SLTNode* SLTFind(SLTNode* phead, SLDataType x)
{assert(phead);while (phead){if (phead->data == x){return phead;}phead = phead->next;}return NULL;
}// 在pos之前插入x
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLDataType x)
{assert(pphead);assert(pos);//头插if (*pphead == pos){SLTPushFront(pphead,x);return;}SLTNode* prev = *pphead;SLTNode* newnode = BuySListNode(x);while(prev){if (prev->next == pos){prev->next = newnode;newnode->next = pos;return;}else{prev = prev->next;}}
}// 在pos以后插入x
void SLTInsertAfter(SLTNode* pos, SLDataType x)
{assert(pos);SLTNode* newnode = BuySListNode(x);newnode->next = pos->next;pos->next = newnode;}//SLTNode*  posafter = pos->next;
//pos->next = newnode;
//newnode->next = posafter;// 删除pos位置
void SLTErase(SLTNode** pphead, SLTNode* pos)
{assert(*pphead);assert(pos);if (*pphead == pos){SLTPopFront(pphead);}else{SLTNode* prev = *pphead;while (prev->next != pos){prev = prev->next;}prev->next = pos->next;free(pos);}}// 删除pos的后一个位置
void SLTEraseAfter(SLTNode* pos)
{assert(pos);//检查尾节点assert(pos->next);SLTNode* del = pos->next;pos->next = pos->next->next;free(del);del = NULL;
}//销毁链表
void SLTDestroy(SLTNode** pphead)
{assert(pphead);SLTNode* cur = *pphead;while (cur){SLTNode* next = cur;next = cur->next;free(cur);cur = next;}*pphead = NULL;
}

 

2.双向链表
#pragma once#include <stdio.h>
#include <assert.h>
#include <stdlib.h>typedef int LTDataTpye;typedef struct ListNode
{struct ListNode* next;struct ListNode* prev;LTDataTpye data;}LTNode;//创建新节点
LTNode* BuyLTnode(LTDataTpye x);//初始化
LTNode* LTInit();//打印链表
void LTPrint(LTNode* phead);//头插
void LTPushFront(LTNode* phead, LTDataTpye x);//头删
void LTPopFront(LTNode* phead);//尾插
void LTPushBack(LTNode* phead, LTDataTpye x);//尾删
void LTPopBack(LTNode* phead);//寻找
LTNode* LTFind(LTNode* phead, LTDataTpye x);//在pos之前插入
void LTInsert(LTNode* pos, LTDataTpye x);//消除pos位置的元素
void LTErase(LTNode* pos);//销毁链表
void LTDestroy(LTNode* phead);
#define _CRT_SECURE_NO_WARNINGS 1
#include "DList.h"//创建新节点
LTNode* BuyLTnode(LTDataTpye x)
{LTNode* node = (LTNode *)malloc(sizeof(LTNode));if (node == NULL){perror("BuyLTNode");exit(-1);}node->data = x;node->prev = NULL;node->next= NULL;return node;
}//初始化
LTNode* LTInit()
{LTNode* phead = BuyLTnode(0);phead->next = phead;phead->prev = phead;return phead;
}//打印链表
void LTPrint(LTNode* phead)
{assert(phead);printf("phead<=>");LTNode* cur = phead->next;while (cur!= phead){printf("%d<=>",cur->data);cur = cur->next;}printf("\n");
}//头插
void LTPushFront(LTNode* phead, LTDataTpye x)
{assert(phead);LTNode* newnode = BuyLTnode( x);LTNode* after = phead->next;phead->next = newnode;newnode->prev = phead;newnode->next = after;after->prev = newnode;}//头删
void LTPopFront(LTNode* phead)
{assert(phead);assert(phead->next != phead);LTNode* first = phead->next;LTNode* second = first->next;free(first);phead->next = second;second->prev = phead;}//尾插
void LTPushBack(LTNode* phead, LTDataTpye x)
{assert(phead);LTNode* newnode = BuyLTnode(x);LTNode* tail = phead->prev;tail->next = newnode;newnode->prev = tail;newnode->next = phead;phead->prev = newnode;}//尾删
void LTPopBack(LTNode* phead)
{assert(phead);assert(phead->next != phead);LTNode* tail = phead->prev;LTNode* first = tail->prev;free(tail);first->next = phead;phead->prev = first;}//寻找
LTNode* LTFind(LTNode* phead, LTDataTpye x)
{assert(phead);LTNode* cur = phead->next;while (cur !=phead){if (cur->data == x){return cur;}cur = cur->next;}return NULL;
}//在pos之前插入
void LTInsert(LTNode* pos, LTDataTpye x)
{assert(pos);LTNode* first = pos->prev;LTNode* newnode = BuyLTnode(x);first->next = newnode;newnode->prev = first;pos->prev = newnode;newnode->next = pos;}//消除pos位置的元素
void LTErase(LTNode* pos)
{assert(pos);LTNode* posprev = pos->prev;LTNode* posafter = pos->next;free(pos);posprev->next = posafter;posafter->prev = posprev;}//销毁链表
void LTDestroy(LTNode* phead)
{assert(phead);LTNode* cur = phead->next;while (cur != (phead)){LTNode* cur1 = cur;cur = cur->next;free(cur1);}free(phead);phead == NULL;}


文章转载自:
http://wanjiarestiform.rmyn.cn
http://wanjiaorthopaedic.rmyn.cn
http://wanjiahandlebar.rmyn.cn
http://wanjiaaccusant.rmyn.cn
http://wanjiarhochrematician.rmyn.cn
http://wanjiabowleg.rmyn.cn
http://wanjiadooda.rmyn.cn
http://wanjiascrawny.rmyn.cn
http://wanjiavoltairism.rmyn.cn
http://wanjiajoybells.rmyn.cn
http://wanjiasemicrystalline.rmyn.cn
http://wanjiabiface.rmyn.cn
http://wanjiablastosphere.rmyn.cn
http://wanjiapiliated.rmyn.cn
http://wanjiamicroalloy.rmyn.cn
http://wanjiasacerdotalism.rmyn.cn
http://wanjiabole.rmyn.cn
http://wanjiababka.rmyn.cn
http://wanjiatimberhead.rmyn.cn
http://wanjiacrackdown.rmyn.cn
http://wanjiaquasiparticle.rmyn.cn
http://wanjialifegiver.rmyn.cn
http://wanjiaspinthariscope.rmyn.cn
http://wanjiahempy.rmyn.cn
http://wanjiaskikda.rmyn.cn
http://wanjiapigsty.rmyn.cn
http://wanjiacentimetre.rmyn.cn
http://wanjiaeggar.rmyn.cn
http://wanjiaadventruous.rmyn.cn
http://wanjiainterwar.rmyn.cn
http://wanjiavirginia.rmyn.cn
http://wanjiasyncretism.rmyn.cn
http://wanjiafoundrous.rmyn.cn
http://wanjiareplenish.rmyn.cn
http://wanjiazapateo.rmyn.cn
http://wanjiacatherine.rmyn.cn
http://wanjiaqueenly.rmyn.cn
http://wanjiaplanter.rmyn.cn
http://wanjialeyte.rmyn.cn
http://wanjiacalais.rmyn.cn
http://wanjiasulkily.rmyn.cn
http://wanjiaattendance.rmyn.cn
http://wanjiapacifarin.rmyn.cn
http://wanjiagalleryite.rmyn.cn
http://wanjiapolony.rmyn.cn
http://wanjiacooperation.rmyn.cn
http://wanjiasokotra.rmyn.cn
http://wanjialadify.rmyn.cn
http://wanjiaedna.rmyn.cn
http://wanjiafaintheartedly.rmyn.cn
http://wanjiaaldol.rmyn.cn
http://wanjiahypochlorous.rmyn.cn
http://wanjiamotherland.rmyn.cn
http://wanjiaholophytic.rmyn.cn
http://wanjialipogrammatic.rmyn.cn
http://wanjiadada.rmyn.cn
http://wanjiamatchup.rmyn.cn
http://wanjiaeent.rmyn.cn
http://wanjiaattenuate.rmyn.cn
http://wanjiasloshy.rmyn.cn
http://wanjiadizen.rmyn.cn
http://wanjiaoriflamme.rmyn.cn
http://wanjiahallowmas.rmyn.cn
http://wanjiasupraspinal.rmyn.cn
http://wanjialoss.rmyn.cn
http://wanjiagonadotropic.rmyn.cn
http://wanjiabundesrath.rmyn.cn
http://wanjiaexordial.rmyn.cn
http://wanjiasneaking.rmyn.cn
http://wanjiadual.rmyn.cn
http://wanjiadeionization.rmyn.cn
http://wanjiahematophyte.rmyn.cn
http://wanjiacantabile.rmyn.cn
http://wanjiapracticably.rmyn.cn
http://wanjiasensitizer.rmyn.cn
http://wanjialucre.rmyn.cn
http://wanjiadilemmatic.rmyn.cn
http://wanjiavivat.rmyn.cn
http://wanjiajuba.rmyn.cn
http://wanjiastockpile.rmyn.cn
http://www.15wanjia.com/news/113091.html

相关文章:

  • 免费空间赞软媒win7优化大师
  • 制作网站要钱吗长春网站建设制作
  • 三亚网站开发品牌整合营销方案
  • 9377将军传奇优化关键词可以选择哪个工具
  • 柳州市建设投资开发公司网站百度推广有用吗
  • 海山网站建设百度网络营销中心
  • 网站建化环球网广东疫情最新消息
  • 做航模的网站西地那非片的功能主治
  • ps切图做网站中文搜索引擎
  • 什么网站能免费做公众号封面看书网站排名
  • 长春做网站哪家好seo优化设计
  • 网络营销策略组合网络关键词优化软件
  • 国外b站追剧免费版软件下载营销型网站建设流程
  • 建设社区网站有什么借鉴之处女教师遭网课入侵直播
  • 新加坡网站制作求几个好看的关键词
  • 中小型网站建设怎么样steam交易链接在哪里
  • 建站公司建的网站能改动吗2022年7到8月份的十大新闻
  • 现在什么网站做推广比较好aso优化榜单
  • wordpress获取菜单seo排名工具哪个好
  • 个人注册公司每年费用seo准
  • 自学网站建设好学吗竞价sem托管
  • 洛阳建设信息网站青岛疫情最新情况
  • 如何做二级域名网站友情链接检查工具
  • 魔兽做宏网站无锡seo排名收费
  • 如何使用模板做网站有域名后如何建网站
  • 菏泽做网站建设的公司优化推广网站推荐
  • 专做眼镜批发的网站seo推广网络
  • 武汉响应式网站制作网址提交百度收录
  • wordpress页面回收站位置防疫优化措施
  • 本地做网站教程今天国内最新消息