单链表的体会

这篇具有很好参考价值的文章主要介绍了单链表的体会。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单链表是一种十分常用的数据结构,可以用来解决很多实际问题。通过学习和实现单链表,可以加深对数据结构和算法的理解,并提高编程能力。

代码实现了单链表的初始化、节点的插入、删除和打印等基本操作。

单链表是一种常见的数据结构,由节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。单链表的优点是插入和删除节点比较容易,时间复杂度为O(1),同时可以动态变化长度,不需要预分配内存空间。但是访问节点的时间复杂度较高,需要遍历整个链表。

单链表本身较易使用,但不适合用于需要频繁访问节点的场景。

学习和实现单链表是在程序设计中掌握数据结构和算法的重要方法之一。单链表的实现需要掌握指针的使用和动态内存分配等技术,对于提高编程能力具有重要意义。在实际编程中,单链表常常用于解决需要动态变化长度和频繁插入和删除节点的问题,具有广泛的应用场景。通过深入理解单链表的实现原理,可以更好地理解其他数据结构和算法,并能够更加高效地解决实际问题。因此,学习和实现单链表对于程序员的职业发展具有积极的促进作用。

#include <stdio.h>

#include <malloc.h>

/**

 * Linked list of characters. The key is data.

 */

typedef struct LinkNode{

 char data;

 struct LinkNode *next;

} LNode, *LinkList, *NodePtr;

/**

 * Initialize the list with a header.

 * @return The pointer to the header.

 */

LinkList initLinkList(){

 NodePtr tempHeader = (NodePtr)malloc(sizeof(LNode));

 tempHeader->data = '\0';

 tempHeader->next = NULL;

 return tempHeader;

}// Of initLinkList

/**

 * Print the list.

 * @param paraHeader The header of the list.

 */

void printList(NodePtr paraHeader){

 NodePtr p = paraHeader->next;

 while (p != NULL) {

  printf("%c", p->data);

  p = p->next;

 }// Of while

 printf("\r\n");

}// Of printList

/**

 * Add an element to the tail.

 * @param paraHeader The header of the list.

 * @param paraChar The given char.

 */

void appendElement(NodePtr paraHeader, char paraChar){

 NodePtr p, q;

 // Step 1. Construct a new node.

 q = (NodePtr)malloc(sizeof(LNode));

 q->data = paraChar;

 q->next = NULL;

 // Step 2. Search to the tail.

 p = paraHeader;

 while (p->next != NULL) {

  p = p->next;

 }// Of while

 // Step 3. Now add/link.

 p->next = q;

}// Of appendElement

/**

 * Insert an element to the given position.

 * @param paraHeader The header of the list.

 * @param paraChar The given char.

 * @param paraPosition The given position.

 */

void insertElement(NodePtr paraHeader, char paraChar, int paraPosition){

 NodePtr p, q;

 // Step 1. Search to the position.

 p = paraHeader;

 for (int i = 0; i < paraPosition; i ++) {

  p = p->next;

  if (p == NULL) {

   printf("The position %d is beyond the scope of the list.", paraPosition);

   return;

  }// Of if

 } // Of for i

 // Step 2. Construct a new node.

 q = (NodePtr)malloc(sizeof(LNode));

 q->data = paraChar;

 // Step 3. Now link.

 printf("linking\r\n");

 q->next = p->next;

 p->next = q;

}// Of insertElement

/**

 * Delete an element from the list.

 * @param paraHeader The header of the list.

 * @param paraChar The given char.

 */

void deleteElement(NodePtr paraHeader, char paraChar){

 NodePtr p, q;

 p = paraHeader;

 while ((p->next != NULL) && (p->next->data != paraChar)){

  p = p->next;

 }// Of while

 if (p->next == NULL) {

  printf("Cannot delete %c\r\n", paraChar);

  return;

 }// Of if

 q = p->next;

 p->next = p->next->next;

 free(q);

}// Of deleteElement

/**

 * Unit test.

 */

void appendInsertDeleteTest(){

 // Step 1. Initialize an empty list.

 LinkList tempList = initLinkList();

 printList(tempList);

 // Step 2. Add some characters.

 appendElement(tempList, 'H');

 appendElement(tempList, 'e');

 appendElement(tempList, 'l');

 appendElement(tempList, 'l');

 appendElement(tempList, 'o');

 appendElement(tempList, '!');

 printList(tempList);

 // Step 3. Delete some characters (the first occurrence).

 deleteElement(tempList, 'e');

 deleteElement(tempList, 'a');

 deleteElement(tempList, 'o');

 printList(tempList);

 // Step 4. Insert to a given position.

 insertElement(tempList, 'o', 1);

 printList(tempList);

}// Of appendInsertDeleteTest

/**

 * Address test: beyond the book.

 */

void basicAddressTest(){

 LNode tempNode1, tempNode2;

 tempNode1.data = 4;

 tempNode1.next = NULL;

 tempNode2.data = 6;

 tempNode2.next = NULL;

 printf("The first node: %d, %d, %d\r\n",

  &tempNode1, &tempNode1.data, &tempNode1.next);

 printf("The second node: %d, %d, %d\r\n",

  &tempNode2, &tempNode2.data, &tempNode2.next);

 tempNode1.next = &tempNode2;

}// Of basicAddressTest

/**

 * The entrance.

 */

int main(){

 appendInsertDeleteTest();

}// Of main
————————————————
版权声明:本文为CSDN博主「沧风」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_72839892/article/details/129848559文章来源地址https://www.toymoban.com/news/detail-714747.html

到了这里,关于单链表的体会的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构—单链表的实现】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 1. 链表的概念及结构 2. 单链表的实现 2.1单链表头文件——功能函数的定义 2.2单链表源文件——功能函数的实现 2.3 单链表源文件——功能的测试 3.具体的理解操作图 4. 链表的分类 总结 世上

    2024年02月05日
    浏览(66)
  • 【数据结构】单链表的实现

    🌇个人主页:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 🛸C语言专栏:https://blog.csdn.net/vhhhbb/category_12174730.html 🚀数据结构专栏:https://blog.csdn.net/vhhhbb/category_12211053.html         家人们更新不易,你们的👍点赞👍和⭐关注⭐真的对我

    2023年04月09日
    浏览(65)
  • 【数据结构】-- 单链表的实现

    在前面我们学习了顺序表,顺序表在数组的基础上提供了很多现成的方法,方便了我们对数据的管理,但是我们也发现顺序表有着许多不足: 在处理大型的数据时,需要频繁的增容且在中间删除或插入数据时需要遍历顺序表,这些性质导致了顺序表的 效率较低 。这时我们就

    2024年04月27日
    浏览(52)
  • 【数据结构】单链表的层层实现!! !

    关注小庄 顿顿解馋(●’◡’●) 上篇回顾 我们上篇学习了本质为数组的数据结构—顺序表,顺序表支持下标随机访问而且高速缓存命中率高,然而可能造成空间的浪费,同时增加数据时多次移动会造成效率低下,那有什么解决之法呢?这就得引入我们链表这种数据结构 概念

    2024年03月12日
    浏览(163)
  • 数据结构--单链表的插入&删除

    目标 单链表的插入(位插、前插、后插) 单链表的删除 按为序插入(带头结点) ListInsert(L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。 思路:找到第i-1个结点,将新结点插入其后 代码实现 时间复杂度 最好时间复杂度 O(1) 最坏时间复杂度 O(1) 平均时间复杂度 O(1) 按位

    2024年02月07日
    浏览(45)
  • 【数据结构】单链表的简单实现

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元

    2024年02月04日
    浏览(57)
  • 探索数据结构:单链表的实战指南

    ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:数据结构与算法 贝蒂的主页:Betty‘s blog 在上一章节中我们讲解了数据结构中的顺序表,知道了顺序表的空间是连续存储的,这与数组非常类似,为我们随机访问数据提供了便利的条件。但

    2024年03月09日
    浏览(66)
  • 【数据结构】实现单链表的增删查

    链表类和节点类的定义: 图解: 从中间位置插入: 图解:假定index=2 尾插: 删除当前线性表中索引为index的元素,返回删除的元素值: 图解: 删除当前线性表中第一个值为element的元素: 删除当前线性表中所有值为element的元素: 将当前线性表中index位置的元素替换为eleme

    2024年02月14日
    浏览(164)
  • 【数据结构】—— 单链表的增删改查

    ❤️一名热爱Java的大一学生,希望与各位大佬共同学习进步❤️ 🧑个人主页:@周小末天天开心 各位大佬的点赞👍 收藏⭐ 关注✅,是本人学习的最大动力 感谢! 📕该篇文章收录专栏—数据结构 目录 方法重写 重写条件 重写好处 重写演示 单链表 介绍 单链表的增删改查

    2024年02月02日
    浏览(47)
  • 【数据结构】单链表的定义和操作

    目录 1.单链表的定义 2.单链表的创建和初始化 3.单链表的插入节点操作 4.单链表的删除节点操作 5.单链表的查找节点操作 6.单链表的更新节点操作 7.完整代码 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CS

    2024年02月02日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包