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

打印 上一主题 下一主题

主题 887|帖子 887|积分 2661

  上一篇随笔谈了谈单链表是什么东西,然后进行了初始化,这篇随笔就开始对其进行操作了,首先是增,删,改,查的增。
  增,顾名思义就是要增加新的元素,单链表是链式的,那就要考虑怎么去加新元素,有三种,从头部添加,从尾部添加,从中间添加。先说说从尾部添加,这个比较好理解,直接在尾部放一个结点然后连起来就好了。
  1、尾插法,从尾部添加节点。
  

 

 
  步骤顺其自然就来了:
  ①要想添加节点就先新建一个节点,即将成为链表的尾结点。
  ②找到尾部,也就是当前链表最后一个结点,最后一个节点与别的节点的区别就是它的next是NULL。
  ③把新建的结点加入到最后一个节点当中,具体操作就是把当前最后一个结点的next指向新建的结点就OK了。=^•ω•^=
 
  1. void AddLetter_Tail(LinkList header, char letter_)
  2. {
  3.     LinkList p,q = NULL;
  4.                                 
  5. // Creaat New node
  6.     q = (LinkList)malloc(sizeof(LNode));
  7.     q->letter = letter_;
  8.     q->next = NULL;
  9. //Search tail
  10.     p = header;
  11.     while(p->next != NULL)
  12.     {
  13.         p = p->next;
  14.     }
  15. // add node
  16.     p->next = q;
  17. }
复制代码
 
  2、头插法,在头结点后面插入新元素,我们不能把头结点抹去,也不能在头结点前面插入,因为我们链表的第一个节点是头结点。
  



   步骤又自然而然的出来了:
  ①老规矩,先新建结点。
  ②找到头部,也就是上一篇随笔里第一次新建的结点,名字叫head。
  ③改变指针指向,新建结点的next指向首元结点(由原链表head的next得到),然后头结点(也就是head)的next指向新建的结点。
   注:第③步顺序可以改变,可以头结点先指向新建结点,新建结点next再指向首元结点,只不过程序上略有不同,需要保存好首元结点的地址也就是原链表head的next,要不然新建结点就找不到指向首元结点的入口了。
  1. void AddLetter_Head(LinkList header,char letter_)
  2. {
  3.     LinkList q,p = NULL;
  4. // Creaat New node
  5.     q = (LinkList)malloc(sizeof(LNode));
  6.     q->letter = letter_;
  7.     q->next = NULL;
  8. //add node
  9.     p = header;
  10.     q->next = p->next;
  11.     p->next = q;
  12.    
  13. }
复制代码
 
  这样就算把头插法和尾插法弄明白了,当添加完元素之后可以先遍历链表看看。
  1. void PrintList(LinkList header)
  2. {
  3.     LinkList p = header->next;
  4.     while(p != NULL)
  5.     {
  6.         printf("%c  ",p->letter);
  7.         p = p->next;
  8.     }
  9.     printf("\n");
  10. }
复制代码
 
 
  
  Main函数代码如下:
  1. int main()
  2. {
  3.     printf("This is Struct_Data:\n\n");
  4.     LinkList head = Init_linklist();
  5.     AddLetter_Tail(head,'H');
  6.     AddLetter_Tail(head,'i');
  7.     AddLetter_Tail(head,',');
  8.     AddLetter_Tail(head,'L');
  9.     AddLetter_Tail(head,'i');
  10.     AddLetter_Tail(head,'n');
  11.     AddLetter_Tail(head,'u');
  12.     AddLetter_Tail(head,'x');
  13.     AddLetter_Tail(head,'.');
  14.     PrintList(head);
  15.     AddLetter_Head(head,'/');   
  16.     AddLetter_Head(head,'U');   
  17.     AddLetter_Head(head,'b');   
  18.     AddLetter_Head(head,'u');   
  19.     AddLetter_Head(head,'n');   
  20.     AddLetter_Head(head,'t');   
  21.     AddLetter_Head(head,'u');   
  22.     AddLetter_Head(head,'.');   
  23.     PrintList(head);
  24.     return 0;
  25. }
复制代码
  效果如图:
  

 
  下一篇将谈一谈中间插入元素,和删除操作。 
 
  总结: ①在学习新东西的时候一定要想清楚自己在干什么,要有主见的去学习新事物。
      ②可以画图,写写字儿,理清自己的思路。
      ③程序不是只能这么写,只要符合逻辑怎么写都行,当时就是太死板,总想着去记住程序。
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

耶耶耶耶耶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表