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

实现单链表

单链表在物理空间上非线性的,相对于顺序表更加节省空间。

链表由一个一个的节点组成,每一个节点储存着数据和指向下一节点的指针,所以链表在逻辑上是线性的。

链表的打印

void SLTPrint(SLTNode* phead)
{SLTNode* pcur = phead;while (pcur){printf(" %d ->", pcur->data);pcur = pcur->next;}printf(" NULL");
}

这里由于不需要对结构体进行修改所以传递一级指针

在链表中插入数据

设置结点

SLTNode* SLTBuyNode(SLTDataType x)
{SLTNode SList;SLTNode* tmp = (SLTNode*)malloc(sizeof(SList));if (tmp == NULL){perror("SLTBuyNode");exit(1);}tmp->data = x;tmp->next = NULL;return tmp;
}

在链表尾部插入数据

void SLTPushBack(SLTNode** pphead, SLTDataType x)
{assert(pphead);SLTNode* tmp = SLTBuyNode(x);if (*pphead == NULL){*pphead = tmp;}else{SLTNode* ptr = *pphead;while (ptr->next){ptr = ptr->next;}ptr->next = tmp;}
}

在链表头部插入数据

void SLTPushFront(SLTNode** pphead, SLTDataType x)
{assert(pphead);SLTNode* tmp = SLTBuyNode(x);tmp->next = *pphead;*pphead = tmp;
}

在链表指定位置之前插入数据

void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x)
{assert(pphead && *pphead&&pos);SLTNode* tmp = SLTBuyNode(x);if (*pphead == pos){SLTPushFront(pphead, x);}else{SLTNode* prev = *pphead;while (prev->next != pos){prev = prev -> next;}prev->next = tmp;tmp->next = pos;}
}

在链表指定位置之后插入数据

void SLTInsertAfter(SLTNode* pos, SLTDataType x)
{assert(pos);SLTNode* tmp1 = pos->next;SLTNode* tmp2 = SLTBuyNode(x);pos->next = tmp2;tmp2->next = tmp1;
}

删除链表的数据

删除链表尾部的数据

void SLTPopBack(SLTNode** pphead)
{assert(pphead);if ((*pphead)->next == NULL){free(*pphead);*pphead = NULL;}else{SLTNode* prev = *pphead;SLTNode* ptr = *pphead;while (ptr->next){prev = ptr;ptr = ptr->next;}free(ptr);ptr = NULL;prev->next = NULL;}
}

删除链表头部的数据

void SLTPopFront(SLTNode** pphead)
{assert(pphead&&*pphead);SLTNode* tmp = NULL;tmp = (*pphead)->next;free(*pphead);*pphead = tmp;
}

删除链表指定位置的数据

void SLTErase(SLTNode** pphead, SLTNode* pos)
{assert(pphead && *pphead&&pos);if (pos==*pphead){SLTPopFront(pphead);}else{SLTNode* tmp = *pphead;while (tmp->next != pos){tmp = tmp->next;}tmp->next = pos->next;free(pos);pos = NULL;}
}

删除链表指定位置之后的数据

void SLTEraseAfter(SLTNode* pos)
{assert(pos && pos->next);SLTNode* tmp = pos->next;pos->next = tmp->next;free(tmp);tmp = NULL;
}

查找链表中的数据

SLTNode* SLTFind(SLTNode* phead, SLTDataType x)
{assert(phead);SLTNode* ptr = phead;while (ptr){if (ptr->data == x)return ptr;elseptr = ptr->next;}return NULL;
}

链表的销毁

void SListDestroy(SLTNode** pphead)
{assert(pphead && *pphead);SLTNode* ptr = *pphead;SLTNode* tmp = *pphead;while (ptr){tmp = ptr->next;free(ptr);ptr = tmp;}*pphead = NULL;
}

http://www.dtcms.com/a/439111.html

相关文章:

  • 企业网站建设如何做好外链建设网站暂停怎么做
  • 图片交易网站如何建设网站死链修复
  • 有关网站建设的参考书江门手工外发加工网
  • LeetCode 刷题【97. 交错字符串】
  • 网站后台登录怎么做的做网站需要哪些方面的支出
  • 公司网站打开显示建设中产品设计网站制作
  • 文具网站建设策划书wordpress 搜索小工具
  • 制作一个网站要花多少钱自学电商还是去培训机构
  • 昆山推广用什么网站比较好如何创建一个免费网站
  • 计算机操作系统 网络入门(小白专版 · 深入浅出)
  • 站长工具seo综合查询外部链接数量商城开发网站
  • STM32电机控制基础知识
  • 算法题(225):樱花
  • 做互联网的网站app客户端网站建设方案
  • 网站描述 关键词上海 有哪些做网站的公司
  • 计算机网络技术电商网站建设与运营方向怎么投放广告
  • 低空经济新纪元:AI驱动的智能无人机技术与应用
  • 专业建站分销商城a wordpress
  • 创建一个顺序栈,并实现基础的“出栈入栈”功能(C++版)
  • 定制手机壳的网站广州冼村旧改最新消息
  • 怎么做淘宝客网站备案网站后台的形成
  • wordpress安装后查看站点失败河北平台网站建设
  • 网站专题页制作网站备案关闭影响排名
  • Python Flask框架深度解析:从入门到高级
  • 网站销售的优势生鲜做的好的网站
  • 中企动力做的网站怎么登陆运城市住房与城乡建设厅网站
  • 香橙派RK3588s部署大模型
  • 【自记】数据开发中分区表、事务表、分区事务表:特性相似处与区别
  • ATMS课程管理系统 - 从零构建的MySQL实战之旅
  • 广东东莞自己建站教程做网站设计的公司叫什么