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

单向链表特点:

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

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

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

节点-> 数据域+指针域

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

链表的操作代码:

#include “linklist.h”
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

LinkList *CreateLinkList()
{ // 1000
LinkList *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;
}
// inserthead
if (0 == pos)
{
return InsertHeadLinkList(list, data);
}
// inserttail
else 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;
}

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"dtmb.taobao.com",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性

山喂资源分享 网站教程 学习嵌入式的第二十一天——数据结构——链表 https://www.023140.com/847.html

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

已经没有下一篇了!

常见问题
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或 联络我们.。
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务