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

学习嵌入式的第二十一天——数据结构——链表

单向链表特点:

存储的内存空间不连续 。为了弥补顺序存储存劣势。

优势
插入,删除   O(1)
动态存储 ,在程序运行期间决定大小。

劣势:
不能随机访问   O(N) 

节点-> 数据域+指针域 

顺序表(数组) 只有数据域

链表的操作代码:

#include "linklist.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>LinkList *CreateLinkList()
{  // 1000LinkList *ll = malloc(sizeof(LinkList));if (NULL == ll){perror("CreateLinkList malloc");return NULL;}ll->head = NULL;ll->clen = 0;return ll;
}int InsertHeadLinkList(LinkList *list, DATATYPE *data)
{LinkNode *newnode = malloc(sizeof(LinkNode));if (NULL == newnode){perror("InsertHeadLinkList malloc");return 1;}//新节点的初始化memcpy(&newnode->data, data, sizeof(DATATYPE));newnode->next = NULL;//链表非空的情况if (!IsEmptyLinkList(list)){newnode->next = list->head;}list->head = newnode;list->clen++;return 0;
}int IsEmptyLinkList(LinkList *list)
{return 0 == list->clen;
}int ShowLinkList(LinkList *list)
{LinkNode *tmp = list->head;while (tmp){printf("name:%s sex:%c age:%d score:%d\n", tmp->data.name, tmp->data.sex,tmp->data.age, tmp->data.score);// tmp++tmp = tmp->next;}return 0;
}int InsertTailLinkList(LinkList *list, DATATYPE *data)
{if (IsEmptyLinkList(list)){return InsertHeadLinkList(list, data);}else{LinkNode *tmp = list->head;// tmp 需要停在最后一个有效节点上while (tmp->next){tmp = tmp->next;}LinkNode *newnode = malloc(sizeof(LinkNode));if (NULL == newnode){perror("InsertTailLinkList malloc");return 1;}memcpy(&newnode->data, data, sizeof(DATATYPE));newnode->next = NULL;tmp->next = newnode;}list->clen++;return 0;
}int InsertPosLinkList(LinkList *list, DATATYPE *data, int pos)
{int len = GetSizeLinkList(list);if (pos < 0 || pos > len){fprintf(stderr, "InsertPosLinkList pos error\n");return 1;}// insertheadif (0 == pos){return InsertHeadLinkList(list, data);}// inserttailelse if (pos == len){return InsertTailLinkList(list, data);}else  //中间插入{LinkNode *tmp = list->head;int off = pos - 1;// tmp 需要停在待插下标节点的前一位置while (off--){tmp = tmp->next;}LinkNode *newnode = malloc(sizeof(LinkNode));if (NULL == newnode){perror("InsertposLinkList malloc");return 1;}memcpy(&newnode->data, data, sizeof(DATATYPE));newnode->next = NULL;newnode->next = tmp->next;tmp->next = newnode;}list->clen++;return 0;
}int GetSizeLinkList(LinkList *list)
{return list->clen;
}LinkNode *FindLinkList(LinkList *list, char *name)
{LinkNode *tmp = list->head;while (tmp){if (0 == strcmp(tmp->data.name, name)){return tmp;}// tmp++;tmp = tmp->next;}return NULL;
}int DeleteLinkList(LinkList *list, char *name)
{if (IsEmptyLinkList(list)){fprintf(stderr, "DeleteLinkList empty list\n");return 1;}LinkNode *tmp = list->head;//删除的是第一个节点if (0 == strcmp(tmp->data.name, name)){list->head = list->head->next;free(tmp);list->clen--;}//非第一个节点else{while (tmp->next){if (0 == strcmp(tmp->next->data.name, name)){//标记待删除的节点LinkNode *del = tmp->next;//链表的指针跨过待删节点tmp->next = tmp->next->next;free(del);list->clen--;break;}tmp = tmp->next;}}return 0;
}int ModifyLinkList(LinkList *list, char *name, DATATYPE *data)
{LinkNode* tmp = FindLinkList(list, name);if(NULL == tmp){printf("modify error\n");return 1;}memcpy(&tmp->data,data,sizeof(DATATYPE));return 0;
}int DestroyLinkList(LinkList *list)
{LinkNode* tmp = list->head;//删除链表while(tmp){list->head = list->head->next;free(tmp);tmp = list->head;}// 释放链表表头free(list);return 0;
}

http://www.lryc.cn/news/625837.html

相关文章:

  • 乾元通渠道商中标六盘水应急指挥能力提升项目
  • 路由器最大传输速率测试
  • 首届机器人足球运动会技术复盘:从赛场表现看智能机器人核心技术突破
  • GTSAM中实现多机器人位姿图优化(multi-robot pose graph optimization)示例
  • 用机器人实现OpenAI GPT-5视觉驱动的闲聊:OpenAIAPI Key获取并配置启动视觉项目
  • sfc_os!SfcQueueValidationRequest函数分析之sfc_os!IsFileInQueue
  • 当MySQL的int不够用了
  • 差速转向机器人研发:创新驱动的未来移动技术探索
  • 实现进度条
  • 1分钟批量生成100张,Coze扣子智能体工作流批量生成人物一致的治愈系漫画图文(IP形象可自定义)
  • 华为鸿蒙系统SSH如何通过私钥连接登录
  • 如何成功初始化一个模块
  • Infusing fine-grained visual knowledge to Vision-Language Models
  • 传输层协议——UDP和TCP
  • 如何理解关系型数据库的ACID?
  • 【集合框架LinkedList底层添加元素机制】
  • ⭐CVPR2025 建模部件级动态的 4D 重建框架
  • 数据安全治理——解读67页2024金融数据安全治理白皮书【附全文阅读】
  • 路由器详解
  • Java JDK官网下载渠道
  • 使用 Ansys Discovery 探索外部空气动力学
  • 《算法导论》第 32 章 - 字符串匹配
  • 【深度学习计算性能】06:多GPU的简洁实现
  • 接口性能测试工具 - JMeter
  • JB4-9-任务调度
  • 《飞算Java AI使用教程:从安装入门到实践项目》
  • 12.3.2设置背景色12.3.3 创建设置类12.4 添加飞船图像 12.4.1 创建Ship 类 12.4.2 在屏幕上绘制飞船
  • 用MacBook进行LLM简单人类指令微调
  • 蓝凌EKP产品:JSP 项目性能基于业务维度的 JS 压缩合并方案优化实战
  • 供水设备智慧化管理物联网解决方案:远程监控与运维