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

免费做外贸的网站平台有哪些昭通市网站建设

免费做外贸的网站平台有哪些,昭通市网站建设,wordpress视网膜主题,技术支持 深圳网站建设贝尔利目录 一. 双向链表的结构 二.双向链表的使用 2.1 创建节点 2.2 初始化 2.3 打印 2.4 尾插 2.5 头插 2.6 尾删 2.7 头删 2.8 在指定位置pos之后插入数据 2.9 查找数据 2.10 删除pos位置的节点 2.11 销毁链表 一. 双向链表的结构 在List.h的头文件中对链表的结构进行创建 #prag…

目录

一. 双向链表的结构

二.双向链表的使用

2.1 创建节点

2.2 初始化

2.3 打印

2.4 尾插

2.5 头插

2.6 尾删

2.7 头删

2.8 在指定位置pos之后插入数据

2.9 查找数据

2.10 删除pos位置的节点

2.11 销毁链表


一. 双向链表的结构

在List.h的头文件中对链表的结构进行创建

#pragma once
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
typedef int LTDataType;//双向链表的结构
typedef struct ListNode
{LTDataType data;struct ListNode* next;struct ListNode* prev;
}LTNode;

为了方便使用,将结构体类型重命名为LTNode

将存储数据的类型通过typedef来使用,方便进行修改

如果双向链表为空,则只有头节点一个节点。

如果phead=NULL,则只能说明这不是一个有效的双向链表。

二.双向链表的使用

2.1 创建节点

(下列的声明就不再显示,直接写函数的实现)

//创建节点
LTNode* LTNBuyNode(LTDataType x)
{LTNode* node = (LTNode*)malloc(sizeof(LTNode));if (node == NULL){perror("malloc fail!");exit(1);}node->data = x;node->next = node->prev = node;return node;
}

 由于带头双向循环链表的特性,prev和next都指向node本身,也就是自身循环

2.2 初始化

//初始化
void LTInit(LTNode** phead)
{* phead =LTNBuyNode(-1);
}

初始化就是创建哨兵位哨兵位的数据和地址都不会被修改

哨兵位也就是头节点,原先单链表中说的头节点其实是指第一个有效节点。

第二种方式:

LTNode* LTInit()
{LTNode*phead = LTNBuyNode(-1);return phead;
}

 无需创建变量,而是直接返回phead

2.3 打印

//打印
void LTPrint(LTNode* phead)//int 类型
{LTNode* pcur = phead->next;while (pcur != phead){printf("%d->", pcur->data);pcur = pcur->next;}printf("\n");
}

2.4 尾插

//尾插
void LTPushBack(LTNode* phead, LTDataType x)
{assert(phead);LTNode* newnode = LTNBuyNode(x);newnode->next = phead;newnode->prev = phead->prev;phead->prev->next = newnode;phead->prev = newnode;
}

尾插主要是要直到双向链表尾插的结构和指针指向就很简单了

如果你要在哨兵位前面头插,那相当于尾插(因为双向链表是带头双向循环链表)

2.5 头插

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

2.6 尾删

//尾删
void LTPopBack(LTNode* phead)
{//链表必须有效,且链表不为空assert(phead&&phead->next!=phead);LTNode* del = phead->prev;del->prev->next = phead;phead->prev = del->prev;free(del);del = NULL;
}

注意,需要del来承载phead->next

链表有效且不为空

2.7 头删

//头删
void LTPopFront(LTNode* phead)
{//链表必须有效,且链表不为空assert(phead && phead->next != phead);LTNode* del = phead->next;//phead,del,del->nextphead->next = del->next;del->next->prev = phead;free(del);del = NULL;
}

2.8 在指定位置pos之后插入数据

//在pos位置之后插⼊数据 
void LTInsert(LTNode* pos, LTDataType x)
{assert(pos);LTNode* newnode = LTNBuyNode(x);newnode->next = pos->next;newnode->prev = pos;pos->next->prev = newnode;pos->next = newnode;
}

2.9 查找数据


//查找
LTNode* LTFind(LTNode* phead, LTDataType x)
{LTNode* pcur = phead->next;while (pcur != phead){if (pcur->data == x){return pcur;}pcur = pcur->next;}return NULL;
}

注意返回的是数据的节点地址

所以之后要检验find是否为空来判断是否有

2.10 删除pos位置的节点

//删除pos节点
//为什么不传二级指针
//为了保证接口的一致性void LTErase(LTNode* pos)
{//理论上pos不能为phead,但是没有参数phead,无法增加校验assert(pos);//pos,pos->next,pos->prevpos->next->prev = pos->prev;pos->prev->next = pos->next;free(pos);pos = NULL;
}

这里不使用二级指针传参是因为为了保证接口的统一性,因为之前的形参都是一级指针

所以此函数使用后需要将find指针变为NULL

2.11 销毁链表

//销毁链表
void LTDestroy(LTNode* phead)
{assert(phead);LTNode* pcur = phead->next;while (pcur != phead){LTNode* next = pcur->next;free(pcur);pcur = next;}free(phead);phead = NULL;
}

使用后还得将plist(实参)赋值为空指针

原来还是应该传二级指针,但是为了接口统一性,跟前者一样


文章转载自:

http://sq6GYjCv.tpkxs.cn
http://eQAPMGeE.tpkxs.cn
http://iFKBPsGY.tpkxs.cn
http://L9w895bm.tpkxs.cn
http://SQ8MGRdw.tpkxs.cn
http://emdG8vMm.tpkxs.cn
http://RQdvsiI4.tpkxs.cn
http://ysoF3jDh.tpkxs.cn
http://578hPRI6.tpkxs.cn
http://sWjaSkEs.tpkxs.cn
http://WlbDOSNg.tpkxs.cn
http://sG0EgN4V.tpkxs.cn
http://GKmUYiNa.tpkxs.cn
http://Vdo3sX3J.tpkxs.cn
http://vrMycP0K.tpkxs.cn
http://gN8HHCLt.tpkxs.cn
http://F9xRh4pG.tpkxs.cn
http://tCbt5zst.tpkxs.cn
http://7pYYgFkm.tpkxs.cn
http://sQiVxtUQ.tpkxs.cn
http://rYVwAW1o.tpkxs.cn
http://MqQVAbzO.tpkxs.cn
http://XZ5nhe0V.tpkxs.cn
http://XH2pZIEQ.tpkxs.cn
http://jTp5JEFr.tpkxs.cn
http://N5EMokcP.tpkxs.cn
http://i7YOm9CT.tpkxs.cn
http://bYpUUIR9.tpkxs.cn
http://y7jkcbbN.tpkxs.cn
http://6X9pRwoZ.tpkxs.cn
http://www.dtcms.com/wzjs/656373.html

相关文章:

  • 网站宣传方法有哪些seo服务标准
  • 银行需要网站开发人员嘛英文网站 icp备案号
  • 企业网站的建设与实现seo外包优化服务商
  • 网站开发的工资wordpress 邮件模板
  • 网站开发的收获与体会手机网站应该怎么做
  • 个人网站建设论文中期报告网络设计费收费标准
  • 网站关键词收费简历电商网站开发经验介绍
  • 淘宝客网站女装模板下载wordpress文章有模板下载
  • 中国城乡建设部人力网站首页建设银行网站的目的是什么
  • 怎么才能百度做网站做cpa广告网站教程
  • 出口退税在哪个网站做怎么自己做网页
  • 烟台做网站电话网站模块结构图
  • 长沙哪里有网站制作如何通过轻淘客做网站
  • iis怎么建设网站内容北京企业网站建设制作
  • 佛山市企业网站建设平台wordpress网站网速慢
  • 网站建设论文选题背景网站开发模版
  • 消费返利网站做的最长久的南宁法拍房源信息
  • wordpress 跨站公司网站建设方案详细方案
  • 苏州建站方法字体设计网站有哪些
  • 绍兴做网站多少钱网站建设中申请备案
  • 个人网站建立多少钱杭州网站排名优化公司
  • 网站建设沟通17素材网官网
  • 陕西企业电脑网站制作页面设计公司排名
  • 西部数码网站备案核验单手机网站跳转怎么做
  • 建设网站需要可以做网站的渠道
  • 手机移动端网站建设宣传数字电视播放的视频格式
  • 小企业网站 优帮云freenom怎么做网站
  • 宜宾市建设工程质量监督站网站网站为什么做静态
  • 网站经常出现502自己建设个人网站要花费多少
  • python做网站 框架good work wordpress