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

wordpress电影网站模板安徽企业网站建设

wordpress电影网站模板,安徽企业网站建设,苏州做网站推广的,北京高端品牌网站定制关于单链表的基础部分增删查改的实现和一点理解&#xff0c;写在注释里~ SList.h #pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h>//定义节点的结构 //数据 指向下一个节点的指针 typedef int SLTDataType;typedef struct SListNo…

关于单链表的基础部分增删查改的实现和一点理解,写在注释里~ 


 


 SList.h

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.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

#include"SList.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 

#include"SList.h"void 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.mmbaike.com/news/27185.html

相关文章:

  • 做展厅 参考什么网站宁波seo关键词优化方法
  • 杭州商城网站制作如何获取永久免费域名
  • 做背景图 网站google play下载安装
  • 都什么网站用wordpress游戏推广代理加盟
  • 做视频直播网站微信推广方式有哪些
  • 广告公司网站首页湖南网站设计外包费用
  • 两学一做网上答题网站关键词规划师工具
  • iis5.1 建立网站百度引流推广
  • 网站的连接二维码怎么做湖北seo
  • 吉林省建设银行网站杭州关键词优化测试
  • 做公司网站有没有必要唐山seo
  • 搭建网站需要的软件百度推广的效果
  • 做网站首页psseo工作
  • 企业网站维护费用白山网络推广
  • 大连网站建设怎么做怎样制作网站
  • 零基础网站建设教学培训班网站推广步骤
  • 精能集团有限公司两学一做网站培训seo去哪家机构最好
  • 优惠券网站建设制作网站开发公司排名
  • 清河县做网站seo技术自学
  • 网站建设与维护公司seo信息是什么
  • 九江市网站建设阿里云建站
  • 东明网站建设武汉百度百科
  • 社交网站怎么做今日热搜榜排行榜
  • 制作网站对话框关于手机的软文营销
  • 南宁网站优化推广方案网络营销的作用
  • 企业网站建设论文网络营销与直播电商好就业吗
  • 互联网开发工资一般多少淘宝优化关键词的步骤
  • 做网站代理工作安全吗廊坊百度推广seo
  • 如何提升网站转化率网络推广的平台有哪些
  • 国有企业投资建设项目临沂seo优化