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

阜阳建设大厦网站大连建设银行招聘网站

阜阳建设大厦网站,大连建设银行招聘网站,百度网站入口链接,seochan是什么意思关于单链表的基础部分增删查改的实现和一点理解#xff0c;写在注释里~ SList.h #pragma once #includestdio.h #includestdlib.h #includeassert.h//定义节点的结构 //数据 指向下一个节点的指针 typedef int SLTDataType;typedef struct SListNo…关于单链表的基础部分增删查改的实现和一点理解写在注释里~  SList.h #pragma once #includestdio.h #includestdlib.h #includeassert.h//定义节点的结构 //数据 指向下一个节点的指针 typedef int SLTDataType;typedef struct SListNode {SLTDataType data;//当前节点存储的数据struct SListNode* next;//指向下一个节点的指针 }SLTNode;//打印 void SLTPrint(SLTNode* phead);//申请节点 SLTNode* SLTBuyNode(SLTDataType x);//尾插 void SLTPushBack(SLTNode** pphead, SLTDataType x); //头插 void SLTPushFront(SLTNode** pphead, SLTDataType x); //尾删 void SLTPopBack(SLTNode** pphead); //头删 void SLTPopFront(SLTNode** pphead);//查找 SLTNode* SLTFind(SLTNode* phead, SLTDataType x);//在指定位置之前插入数据 void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x); //在指定位置之后插入数据 void SLTInsertAfter(SLTNode* pos, SLTDataType x);//删除pos节点 void SLTErase(SLTNode** pphead, SLTNode* pos); //删除pos之后的节点 void SLTEraseAfter(SLTNode* pos);//销毁链表 void SListDesTroy(SLTNode** pphead); SList.c #includeSList.h//只要形参变了而实参没有变化那么就什么传的是值而不是地址//data节点存储的数据 //next指向下一个节点的指针//打印 void SLTPrint(SLTNode* phead) {//创建一个临时变量pcur将头节点的值赋予给pcur//pcur指向当前节点的值SLTNode* pcur phead;//判断pcur是否为空while (pcur){//打印指向当前节点存储的数据printf(%d-, pcur-data);//将pucr指向的下一个节点指针的地址赋予给pcurpcur pcur-next;}//当pcur为空时则打印NULLprintf(NULL\n); }//申请节点 SLTNode* SLTBuyNode(SLTDataType x) {SLTNode* newnode (SLTNode*)malloc(sizeof(SLTNode));if (newnode NULL){perror(malloc fail!);exit(1);}newnode-data x;newnode-next NULL;return newnode; }//尾插 // 只要形参变了而实参没有变化那么就什么传的是值而不是地址 //要先找到尾节点再把尾节点的next指针指向新节点newnode void SLTPushBack(SLTNode** pphead, SLTDataType x) {assert(pphead);//*pphead 就是指向第一个节点的指针//申请一个新节点SLTNode* newnode SLTBuyNode(x);//如果为空链表if (*pphead NULL){*pphead newnode;}else//非空链表{//找尾节点//定义一个尾节点链表刚开始头节点和尾节点在同一个位置SLTNode* ptail *pphead;//*pphead一级指针指向第一个节点的指针//判断当尾节点指针指向的下一个位置为NULL结束//当ptail指针指向的下一个位置不为NULL时ptail继续运行while (ptail-next){//把ptail指针指向的下一个位置的指针地址赋予ptailptail ptail-next;}//当ptail指针指向的下一个位置为NULL时ptail指向的就是尾结点//将ptail的next指针指向新节点ptail-next newnode;}}//头插 void SLTPushFront(SLTNode** pphead, SLTDataType x) {assert(pphead);//申请一个新节点SLTNode* newnode SLTBuyNode(x);//*pphead一级指针指向第一个节点的指针//将新节点的next指针指向*pphead 头节点newnode-next *pphead;//然后再把新节点变成新的头节点*pphead*pphead newnode; }//尾删 void SLTPopBack(SLTNode** pphead) {//链表不能为空assert(pphead *pphead);//如果链表只有一个节点if ((*pphead)-next NULL) // - 优先级高于*{free(*pphead);*pphead NULL;}else//如果链表有多个节点{//定义一个函数prev前一个//将prev和ptail都指向头节点 *ppheadSLTNode* prev *pphead;SLTNode* ptail *pphead;//判断ptail的next指针是否为空while (ptail-next){//将prev指向ptail的位置ptail指向ptail的next指针的位置prev ptail;ptail ptail-next;}//如果ptail的next指针不为空则把ptail free掉free(ptail);//将ptail和prev的next指针置为空ptail NULL;prev-next NULL;} }//头删 void SLTPopFront(SLTNode** pphead) {//链表不能为空assert(pphead *pphead);//定义一个next指针将头节点的next指针指向第二个节点next//用来保存第二个节点的位置SLTNode* next (*pphead)-next;//释放头节点free(*pphead);//将第二个节点变成新的头节点*pphead next; }//查找 SLTNode* SLTFind(SLTNode* phead, SLTDataType x) {//定义一个指针pcur指向头节点//这里不论pcur怎么变化都不会影响pheadSLTNode* pcur phead;//while循环遍历while (pcur){//判断当前节点存储的数据是否与要查找的值相同if (pcur-data x){//如果是就返回pcurreturn pcur;}//不是pcur就指向pcur的next指针继续走pcur pcur-next;}//如果结束循环还没有找到就返回NULLreturn NULL; }//在指定位置之 前 插入数据 prev:上一个 void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x) {//链表不能为空assert(pphead *pphead);assert(pos);//插入之前要先申请新节点SLTNode* newnode SLTBuyNode(x);若pos *pphead;说明是头插if (pos *pphead){SLTPushFront(pphead, x);}else//不是头插{//先找到pos的前一个节点//定义一个函数prev指向头节点SLTNode* prev *pphead;//如果prev的下一个指针指向的 不是 pos则进行循环while (prev-next ! pos){//不是prev就指向prev的next指针继续走prev prev-data;}//找到之后//prev-newnode-pos//先将newnode的next指针指向pos再把prev的next指针指向指向newnodenewnode-next pos;prev-next newnode;}}//在指定位置之 后 插入数据 void SLTInsertAfter(SLTNode* pos, SLTDataType x) {assert(pos);SLTNode* newnode SLTBuyNode(x);//pos - newnode - pos-next//先将newnode的next指针指向pos的下一个节点(next)再把pos的next指针指向newnodenewnode-next pos-next;pos-next newnode; }//删除pos节点 void SLTErase(SLTNode** pphead, SLTNode* pos) {assert(pphead *pphead);assert(pos);//pos是头结点if (pos *pphead){//头删SLTPopFront(pphead);}else//pos不是头结点{SLTNode* prev *pphead;while (prev-next ! pos){prev prev-next;}//prev pos pos-next//要先把prev的下一个指针指向pos的下一个指针指向的位置再释放掉pos// 防止找不到pos的下一个指针指向的位置prev-next pos-next;free(pos);pos NULL;} }//删除pos之后的节点 void SLTEraseAfter(SLTNode* pos) {assert(pos pos-next);//定义一个临时指针del将pos的next指针存放到del中SLTNode* del pos-next;//把pos的next指针指向del的next指针//pos del del-nextpos-next del-next;free(del);del NULL; }//销毁链表 void SListDesTroy(SLTNode** pphead) {assert(pphead *pphead);SLTNode* pcur *pphead;while (pcur){SLTNode* next pcur-next;free(pcur);pcur next;}//pcur*pphead NULL; } Test.c  #includeSList.hvoid SListTest01() {//链表是由一个一个的节点组成//创建几个节点SLTNode* node1 (SLTNode*)malloc(sizeof(SLTNode));node1-data 1;SLTNode* node2 (SLTNode*)malloc(sizeof(SLTNode));node2-data 2;SLTNode* node3 (SLTNode*)malloc(sizeof(SLTNode));node3-data 3;SLTNode* node4 (SLTNode*)malloc(sizeof(SLTNode));node4-data 4;//将四个节点连接起来node1-next node2;node2-next node3;node3-next node4;node4-next NULL;//调用链表的打印SLTNode* plist node1;SLTPrint(plist); }void SListTest02() {SLTNode* plist NULL;SLTPushBack(plist, 1);SLTPushBack(plist, 2);SLTPushBack(plist, 3);SLTPushBack(plist, 4);SLTPrint(plist); // 1-2-3-4-NULLSListDesTroy(plist);SLTPrint(plist);//测试查找//SLTNode* find SLTFind(plist, 1);//SLTInsert(plist, find, 11);//SLTInsertAfter(find, 11);//删除pos节点//SLTErase(plist, find);//SLTEraseAfter(find);//SLTPrint(plist);//if (find NULL)//{// printf(没有找到\n);//}//else {// printf(找到了\n);//}//SLTPushBack(NULL, 5);////测试头插//SLTPushFront(plist, 6);//SLTPrint(plist);//SLTPushFront(plist, 7);//SLTPrint(plist);//SLTPushFront(plist, 8);//SLTPrint(plist);//测试头删//SLTPopFront(plist);//SLTPrint(plist);// 2-3-4-NULL//SLTPopFront(plist);//SLTPrint(plist);//SLTPopFront(plist);//SLTPrint(plist);//SLTPopFront(plist);//SLTPrint(plist);//SLTPopFront(plist);//SLTPrint(plist);}int main() {//SListTest01();SListTest02();return 0; } 一点浅解感谢观看~
http://www.hkea.cn/news/14286981/

相关文章:

  • 自己动手制作网站唐山免费自助建站模板
  • 网站备案 关闭网站沈阳网站建设报价
  • 网站建设四不问题中国住房和城乡建设部网站注册中心
  • 网站建设专家是干嘛的怎么在网上卖东西
  • 百度免费网站空间南山区住房与建设局官方网站
  • 成都科技网站建设费用wordpress做文学网
  • 网站怎么换服务器丹阳企业网站制作
  • 做网站什么一级导航二级导航上海网站建设安全
  • 网站建设执行力wordpress seo插件中文
  • 一流的镇江网站优化外包网络推广公司怎么选
  • 网站的文章参考文献怎么做wordpress 个人资料页
  • 做网站的课题背景介绍php电子商务网站建设
  • 自己怎么免费做网站案列网站
  • 建设网站后期需要哪些建设网络平台绩效目标申报表
  • 做网站推广广告餐饮招商
  • express 网站开发泰安大众网
  • 做网站要学的教程网页制作讲解视频
  • 网站活动推广方案wordpress前台登录模块
  • 学中文网站网站建设和网站设计的区别
  • 建设网站属于什么费用吗wordpress火箭加速
  • 综合网站推广做网站推广需要多少钱
  • 站长检测工具腾讯域名购买
  • 签名设计网站佛山建站专
  • 长治网站制作报价网站页面打不开
  • 网站上传的图片不显示在那个上面做网站都能搜到
  • 东阳哪里可以做网站百度seo站长工具
  • 十堰网站设计公司vue做网站的实例
  • 襄阳网站设计制作公司群晖下搭建wordpress
  • 网站建设需要下载哪些软件重庆seo外包平台
  • 长沙手机网站建设公司哪家好id怎么自动导入wordpress