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

亚马逊做超链接的网站怎么写网站建设的说明

亚马逊做超链接的网站,怎么写网站建设的说明,中国最大的网站,微信建设网站哪家好双向链表 前置知识:链表的分类1 概念与结构2 实现双向链表List.hList.c初始化头插、尾插指定位置插入头删、尾删指定位置删查找摧毁完整代码 main.c 3. 顺序表与链表的分析 前置知识:链表的分类 链表的结构⾮常多样,以下情况组合起来就有8种…

双向链表

      • 前置知识:链表的分类
      • 1 概念与结构
      • 2 实现双向链表
        • List.h
        • List.c
          • 初始化
          • 头插、尾插
          • 指定位置插入
          • 头删、尾删
          • 指定位置删
          • 查找
          • 摧毁
          • 完整代码
        • main.c
      • 3. 顺序表与链表的分析

前置知识:链表的分类

链表的结构⾮常多样,以下情况组合起来就有8种(2x2x2)链表结构

在这里插入图片描述

在这里插入图片描述
无头单向非循环链表:结构简单,一般不单独存数据,常作为其他数据结构的子结构,在笔试面试中出现较多。
带头双向循环链表:结构最复杂,一般用于单独存储数据。虽然结构复杂,但实现后会带来很多优势,代码实现反而简单。

1 概念与结构

在这里插入图片描述

带头双向循环链表中,“带头”的头结点实际为“哨兵位”,不存储任何有效元素,只起“放哨”作用。
在这里插入图片描述

2 实现双向链表

总的原则:
头结点要发生改变传二级指针
头结点不需要改变传一级指针

List.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>//双向链表结构
typedef int LTDataType;
typedef struct ListNode
{int data;struct ListNode* next;struct ListNode* prev;
}LTNode;void LTPrint(LTNode* phead);
//双向链表的初始化
//void LTInit(LTNode** pphead);LTNode* LTInit();//头结点要发生改变传二级
// 不需要改变传一级
//尾插
void LTPushBack(LTNode* phead, LTDataType x);//头插
void LTPushFront(LTNode* phead, LTDataType x);//只有一个头结点的情况下,双向链表为空
bool LTEmpty(LTNode* phead);//尾删
void LTPopBack(LTNode* phead);//头删
void LTPopFront(LTNode* phead);//查找
LTNode* LTFind(LTNode* phead, LTDataType x);//在pos位置之后插入x
void LTInsert(LTNode* pos, LTDataType x);//删除pos位置的结点
void LTErase(LTNode* pos);//摧毁
//违背了接口一致性
//void LTDesTroy(LTNode** pphead);
//传一级:需要最后手动置为空(推荐)
void LTDesTroy(LTNode* phead);
List.c
初始化
LTNode* LTBuyNode(LTDataType x)
{LTNode* newnode = (LTNode*)malloc(sizeof(LTNode));if (newnode == NULL){perror("malloc fail");exit(1);}newnode->data = x;newnode->next = newnode->prev = newnode;return newnode;
}
/*方法一:通过形参返回*/
//void LTInit(LTNode** pphead)
//{
//	assert(pphead);
//	*pphead = LTBuyNode(-1);
//}
/*方法二:通过返回值返回*/
LTNode* LTInit()
{LTNode* phead = LTBuyNode(-1);return phead;
}

这里建议用方法二,原因是
方法二不用二级指针操作更方便,通过返回值返回;

头插、尾插

头插
在这里插入图片描述

//头插
void LTPushFront(LTNode* phead,LTDataType x)
{assert(phead);LTNode* newnode = LTBuyNode(x);newnode->next = phead->next;newnode->prev = phead;phead->next->prev = newnode;phead->next = newnode;
}

尾插
在这里插入图片描述

void LTPushBack(LTNode* phead, LTDataType x)
{assert(phead);LTNode* newnode = LTBuyNode(x);//phead  phead->prev(尾结点) newnode//注意顺序,先处理newnode,再修改phead结点//(1)newnode->prev = phead->prev;newnode->next = phead;//(2)phead->prev->next = newnode;phead->prev = newnode;
}
指定位置插入

在这里插入图片描述

//在pos位置之后插入x
void LTInsert(LTNode* pos, LTDataType x)
{assert(pos);LTNode* newnode = LTBuyNode(x);newnode->next = pos->next;newnode->prev = pos;pos->next->prev = newnode;pos->next = newnode;
}
头删、尾删

头删
在这里插入图片描述

//头删
void LTPopFront(LTNode* phead)
{assert(phead);LTNode* del = phead->next;del->next->prev = phead;phead->next = del->next;free(del);del = NULL;
}

尾删
在这里插入图片描述

//尾删
void LTPopBack(LTNode* phead)
{assert(!LTEmpty(phead));LTNode* del = phead->prev;del->prev->next = phead;phead->prev = del->prev;free(del);del = NULL;
}
指定位置删

在这里插入图片描述

//删除pos位置的结点
void LTErase(LTNode* pos)
{assert(pos);//pos pos->prev pos->nextpos->next->prev = pos->prev;pos->prev->next = pos->next;free(pos);pos = NULL;
}
查找
//查找
LTNode* LTFind(LTNode* phead, LTDataType x)
{assert(phead);LTNode* pcur = phead->next;while (pcur != phead){if (pcur->data == x){return pcur;}pcur = pcur->next;}return NULL;
}
摧毁
//销毁
//方法一:main函数调用无需任何操作
//void LTDesTroy(LTNode** pphead)
//{
//	LTNode* pcur = (*pphead)->next;
//
//	while (pcur != *pphead)
//	{
//		LTNode* next = pcur->next;
//		free(pcur);
//		pcur = next;
//	}
//	free(*pphead);
//	*pphead = NULL;
//}
//方法二:在main函数调用后将phead == NULL
void LTDesTroy(LTNode* pphead)
{LTNode* pcur = pphead->next;while (pcur != pphead){LTNode* next = pcur->next;free(pcur);pcur = next;}free(pphead);pphead = NULL;
}
完整代码
#include"List.h"
LTNode* LTBuyNode(LTDataType x)
{LTNode* newnode = (LTNode*)malloc(sizeof(LTNode));if (newnode == NULL){perror("malloc fail");exit(1);}newnode->data = x;newnode->next = newnode->prev = newnode;return newnode;
}
//void LTInit(LTNode** pphead)
//{
//	assert(pphead);
//	*pphead = LTBuyNode(-1);
//}LTNode* LTInit()
{LTNode* phead = LTBuyNode(-1);return phead;
}
//打印双链表
void LTPrint(LTNode* phead)
{LTNode* pcur = phead->next;while (pcur != phead){printf("%d -> ", pcur->data);pcur = pcur->next;}printf("\n");}//尾插
void LTPushBack(LTNode* phead, LTDataType x)
{assert(phead);LTNode* newnode = LTBuyNode(x);//phead  phead->prev(尾结点) newnode//注意顺序,先处理newnode,再修改phead结点//(1)newnode->prev = phead->prev;newnode->next = phead;//(2)phead->prev->next = newnode;phead->prev = newnode;
}//头插
void LTPushFront(LTNode* phead,LTDataType x)
{assert(phead);LTNode* newnode = LTBuyNode(x);newnode->next = phead->next;newnode->prev = phead;phead->next->prev = newnode;phead->next = newnode;
}//是否为空
bool LTEmpty(LTNode* phead)
{return phead == phead->next;
}//尾删
void LTPopBack(LTNode* phead)
{assert(!LTEmpty(phead));LTNode* del = phead->prev;del->prev->next = phead;phead->prev = del->prev;free(del);del = NULL;
}//头删
void LTPopFront(LTNode* phead)
{assert(phead);LTNode* del = phead->next;del->next->prev = phead;phead->next = del->next;free(del);del = NULL;
}//查找
LTNode* LTFind(LTNode* phead, LTDataType x)
{assert(phead);LTNode* pcur = phead->next;while (pcur != phead){if (pcur->data == x){return pcur;}pcur = pcur->next;}return NULL;
}//在pos位置之后插入x
void LTInsert(LTNode* pos, LTDataType x)
{assert(pos);LTNode* newnode = LTBuyNode(x);newnode->next = pos->next;newnode->prev = pos;pos->next->prev = newnode;pos->next = newnode;
}//删除pos位置的结点
void LTErase(LTNode* pos)
{assert(pos);//pos pos->prev pos->nextpos->next->prev = pos->prev;pos->prev->next = pos->next;free(pos);pos = NULL;
}//销毁
//void LTDesTroy(LTNode** pphead)
//{
//	LTNode* pcur = (*pphead)->next;
//
//	while (pcur != *pphead)
//	{
//		LTNode* next = pcur->next;
//		free(pcur);
//		pcur = next;
//	}
//	free(*pphead);
//	*pphead = NULL;
//}void LTDesTroy(LTNode* pphead)
{LTNode* pcur = pphead->next;while (pcur != pphead){LTNode* next = pcur->next;free(pcur);pcur = next;}free(pphead);pphead = NULL;
}
main.c
#include"List.h"//
void test01()
{/*LTNode* plist = NULL;LTInit(&plist);*/LTNode* plist = LTInit();LTPushBack(plist, 9);LTPushFront(plist, 1);LTPushFront(plist, 2);LTPushFront(plist, 3);//LTPopBack(plist);//LTPopFront(plist);LTNode* find = LTFind(plist, 2);if (find == NULL){printf("没找到\n");}else{printf("找到了\n");}LTPrint(plist);LTInsert(find, 100);LTPrint(plist);LTErase(find);find = NULL;LTPrint(plist);LTDesTroy(plist);plist = NULL;LTPrint(plist);
}int main()
{test01();return 0;
}

3. 顺序表与链表的分析

不同点顺序表链表(单链表)
存储空间上物理上一定连续逻辑上连续,但物理上不一定连续
随机访问支持O(1)不支持,时间复杂度为O(N)
任意位置插入或者删除元素可能需要搬移元素,效率低,时间复杂度为O(N)只需修改指针指向
插入动态顺序表,空间不够时需要扩容和空间浪费没有容量的概念,按需申请释放,不存在空间浪费
应用场景元素高效存储+频繁访问任意位置高效插入和删除

文章转载自:

http://gRRXNiYt.sbrxm.cn
http://aSC1S9Ag.sbrxm.cn
http://SIQ9i3ah.sbrxm.cn
http://6jVSGAKg.sbrxm.cn
http://jvdwMDYg.sbrxm.cn
http://S1t4kvxS.sbrxm.cn
http://Kg4QkZ32.sbrxm.cn
http://QEat8Uyx.sbrxm.cn
http://ipshmNC2.sbrxm.cn
http://Q7gHQMvz.sbrxm.cn
http://ePD5i6HC.sbrxm.cn
http://dIMZEL4V.sbrxm.cn
http://UJRFHwHU.sbrxm.cn
http://of5cOHfT.sbrxm.cn
http://PMxcvWpr.sbrxm.cn
http://oL2as0UM.sbrxm.cn
http://WqdO1v2R.sbrxm.cn
http://ywC4sqqZ.sbrxm.cn
http://oVOZspY2.sbrxm.cn
http://vjl8ZTfq.sbrxm.cn
http://R3rLqxcJ.sbrxm.cn
http://5GCCo7JU.sbrxm.cn
http://5AMeQdC7.sbrxm.cn
http://CcV0Bn5T.sbrxm.cn
http://OWNE9gnb.sbrxm.cn
http://7ll0vENS.sbrxm.cn
http://mUBWJfyf.sbrxm.cn
http://u1KwL9eJ.sbrxm.cn
http://fkjC2QUb.sbrxm.cn
http://63JRtxIm.sbrxm.cn
http://www.dtcms.com/wzjs/737860.html

相关文章:

  • 电子商务网站的建设流程是怎样的ASP.NET与网站开发编程实战
  • 青岛西海岸新区城市建设局网站页面设计时最好只使用一种颜色避免视觉效果混响
  • 专业网站优化方案教师遭网课入侵直播录屏曝光口
  • 网站渠道建设180天做180个网站
  • 在国税网站怎么做实名大连手机自适应网站建设公司
  • 网站内部优化策略网站怎么自己做服务器
  • 湛江模板做网站域名建设网站
  • wordpress 4.3.4下载网站优化流程
  • 嘉兴做网站的公司免费网络连接软件
  • 项目宣传网站模板wordpress 去除 栏头
  • 做网站设计师的原因快速网站建设费用
  • 开源网站开发文档下载seo是什么职业岗位
  • 广西南宁官方网站企业网页生成器
  • 网站不被收录的原因网站备案信息是什么意思
  • 怎么自己做淘宝客网站免费最好网站建设
  • 企业网站开发有哪些做外单网站有哪些内容
  • 中国电信网站备案管理系统工程建设范围
  • 红酒网站制作江苏省建设档案网站
  • 网站怎么运营推广企业为什么要建立集团
  • 小游戏网站模板品牌手表网站
  • 怎么快速做网站广西城乡和住房建设厅网站首页
  • 网站开发需求表建设银行论坛网站
  • 出格做网站怎么样广州天河建网站的公司
  • 学点啥网站桂林微信网站
  • 广东移动网站网站赚取广告费
  • 江西省住房与城乡建设厅网站潍坊尚呈网站建设公司
  • 东莞专业网站建设推广seo服务合同
  • 免费建立个人网站凡科工商注册网站
  • 浙江大数据网站建设问答知识美容院网站源码
  • 做网站运营需要注意哪些问题使用织梦系统建设网站教程