首页 > 其他分享 >C语言:数据结构之单链表(二)

C语言:数据结构之单链表(二)

时间:2023-07-08 09:22:38浏览次数:30  
标签:结点 单链 Head head C语言 next Tail AddLetter 数据结构

  上一篇随笔谈了谈单链表是什么东西,然后进行了初始化,这篇随笔就开始对其进行操作了,首先是增,删,改,查的增。

  增,顾名思义就是要增加新的元素,单链表是链式的,那就要考虑怎么去加新元素,有三种,从头部添加,从尾部添加,从中间添加。先说说从尾部添加,这个比较好理解,直接在尾部放一个结点然后连起来就好了。

  1、尾插法,从尾部添加节点。

  

 

 

  步骤顺其自然就来了:

  ①要想添加节点就先新建一个节点,即将成为链表的尾结点。

  ②找到尾部,也就是当前链表最后一个结点,最后一个节点与别的节点的区别就是它的next是NULL。

  ③把新建的结点加入到最后一个节点当中,具体操作就是把当前最后一个结点的next指向新建的结点就OK了。=^•ω•^=

 

void AddLetter_Tail(LinkList header, char letter_)
{
    LinkList p,q = NULL;
                                
// Creaat New node
    q = (LinkList)malloc(sizeof(LNode)); 
    q->letter = letter_;
    q->next = NULL;

//Search tail
    p = header;
    while(p->next != NULL)
    {
        p = p->next;
    }

// add node
    p->next = q;

}

 

  2、头插法,在头结点后面插入新元素,我们不能把头结点抹去,也不能在头结点前面插入,因为我们链表的第一个节点是头结点。

  

   步骤又自然而然的出来了:

  ①老规矩,先新建结点。

  ②找到头部,也就是上一篇随笔里第一次新建的结点,名字叫head。

  ③改变指针指向,新建结点的next指向首元结点(由原链表head的next得到),然后头结点(也就是head)的next指向新建的结点。

   注:第③步顺序可以改变,可以头结点先指向新建结点,新建结点next再指向首元结点,只不过程序上略有不同,需要保存好首元结点的地址也就是原链表head的next,要不然新建结点就找不到指向首元结点的入口了。

void AddLetter_Head(LinkList header,char letter_)
{
    LinkList q,p = NULL;

// Creaat New node
    q = (LinkList)malloc(sizeof(LNode));
    q->letter = letter_;
    q->next = NULL;

//add node
    p = header;

    q->next = p->next;
    p->next = q;
    
}

 

  这样就算把头插法和尾插法弄明白了,当添加完元素之后可以先遍历链表看看。

void PrintList(LinkList header)
{
    LinkList p = header->next;
    while(p != NULL)
    {
        printf("%c  ",p->letter);
        p = p->next;
    } 

    printf("\n");
}

 

 

  

  Main函数代码如下:

int main()

{
    printf("This is Struct_Data:\n\n");

    LinkList head = Init_linklist();

    AddLetter_Tail(head,'H');
    AddLetter_Tail(head,'i');
    AddLetter_Tail(head,',');
    AddLetter_Tail(head,'L');
    AddLetter_Tail(head,'i');
    AddLetter_Tail(head,'n');
    AddLetter_Tail(head,'u');
    AddLetter_Tail(head,'x');
    AddLetter_Tail(head,'.');
    PrintList(head);


    AddLetter_Head(head,'/');    
    AddLetter_Head(head,'U');    
    AddLetter_Head(head,'b');    
    AddLetter_Head(head,'u');    
    AddLetter_Head(head,'n');    
    AddLetter_Head(head,'t');    
    AddLetter_Head(head,'u');    
    AddLetter_Head(head,'.');    
    PrintList(head);


    return 0;
}

  效果如图:

  

 

  下一篇将谈一谈中间插入元素,和删除操作。 

 

  总结: ①在学习新东西的时候一定要想清楚自己在干什么,要有主见的去学习新事物。

      ②可以画图,写写字儿,理清自己的思路。

      ③程序不是只能这么写,只要符合逻辑怎么写都行,当时就是太死板,总想着去记住程序。

 

标签:结点,单链,Head,head,C语言,next,Tail,AddLetter,数据结构
From: https://www.cnblogs.com/WATER-code/p/17534175.html

相关文章

  • 数据结构day1
    数据结构的一些基本概念:1、数据。2、数据项、3、数据元素、4、数据结构5、算法数据的逻辑结构:1、线型结构2、树型结构3、图型结构数据的存储结构:1、顺序结构2、链式结构链式表:1、带头节点的链表2、不带头节点的链表功能受限的表结构:栈:************实现一个函数判......
  • C语言单例模式
    单例模式的定义​ 单例模式的需求是保证在代码的整个运行期间,某种数据类型只有一个唯一的实例子。并且提供一个全局的访问接口。我们可以从两个角度来理解单例模式数据类型有且仅可以创建一个实例,编程人员不可以的随意的定义的此类型的实例。我们必须限制这种数据结构的创建。......
  • 数据结构与算法(一)
    需要点Java编程基础常见的数据结构栈(Stack):栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。队列(Queue):队列和栈类似,也是一种特殊的线性表。和栈不同的是,队列只允许在表的一端进行插入操作,而在另一端进行删除操作。数组(Array):数组是一种聚合数据......
  • C/C++数据结构与算法课程设计[2023-07-06]
    C/C++数据结构与算法课程设计[2023-07-06]数据结构与算法课程设计一、课程设计的目的、要求和任务 本课程设计是为了配合《数据结构与算法》课程的开设,通过设计完整的程序,使学生掌握数据结构的应用、算法的编写等基本方法。1.课程的目的(1)使学生进一步理解和掌握课堂上所学......
  • 数据结构
    绪论基本概念数据数据是信息的载体,是描述客观事物属性的数,字符及所有能输入到计算机中并被计算机程序识别和处理的符号集合,数据时计算机加工的原料。数据元素数据项数据元素:数据的基本单位数据项:数据元素由多个数据项组成数据结构数据对象结构:各元素之间的关系数据......
  • 数据结构(算法)【7月6日】
    一、算法的基本概念:1、算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。2、算法的特性:(1)有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成;【算法是有穷的,程序是无穷的】(2)确定性:算法中每条指令必须有确切的含义,......
  • 数据结构与算法1-2
    王争,西安交通大学计算机专业本科毕业时候编程水平其实是很差的。读研究生看《算法导论》。从此我对算法的“迷恋”便一发不可收拾。之后,我如把图书馆里几乎所有数据结构和算法书籍都读了一遍。我边读边练。没多久我就发现,写代码时会不由自主考虑很多性能方面的问题。我写出时间......
  • 数据结构--图的遍历
    图的遍历遍历的定义遍历实质:找每个顶点的邻接点的过程.图的特点图可能存在回路所以我们需要设置辅助数组来标记访问过的节点,防止多次访问.遍历方法深度优先搜索(DFS)方法:深度优先遍历可能有很多种方式连通图的深度优先遍历类似于树的先根遍历.邻接矩阵的深度优......
  • C语言(3)
    目录8.指针8.1引入8.2指针8.3*的含义8.4指针的初始化8.5一维数组和指针8.6二维数组与指针8.7指针数组与数组指针8.指针8.1引入一个变量有几种含义空间值当我们顶一个一个变量之后,这个变量就可以代表这个空间本身,也可以表示空间中的值在内存中,为了方便对内存的管理,计算机......
  • C语言进阶- 2
    1、输出0~9之间的数#include<stdio.h>intmain(){ intch=0; while((ch=getcharr())!=EOF) { if(ch<'0'||ch>'9') continue; putchar(ch); } return0;}for循环使用while循环时,循环变量初始、循环判断、循环调整,可能会离得比较远,不容易修改,如下;所以就使用了......