一.单链表练习和一些功能实现
【1】单链表实现字典查询

(1)定义存放数据的结构体,在每次向里面存放数据时候需要清空

(2)对字典进行切割

空格切割字母,再从剩余里切割到解释,这里windows的txt文件下,以\r\n结尾,切除\r保留\n

(3)存放进结构体中
(4)插入链表,插入函数


(5)从键盘获得要查询的单词,\n读入需要消除
(6)进行查找
【2】单链表的剩余操作
(1)单链表的逆序


1.三个指针分别指向前中后三个节点
2.将中间节点下一个指向前节点
![]()
3.将三个指针后移一格
4.最后将最后节点的位置给头
(2)中间元素的查找
定义两指针,一个走两格,一个走一格
(3)查找末尾链表

一个先走,然后同步走
(4)链表的排序


int InsertSortLinkList (LinkList *ll)
 {
   // 获取链表的头节点
   LinkNode *phead = ll->head;
  // 初始化要插入的节点为头节点的下一个节点(链表的第一个有效节点)
   LinkNode *pinsert = phead->next;
  // 保存下一个待处理节点,避免在插入过程中丢失链表的连接
   LinkNode *pnext = pinsert->next;
  // 将头节点的 next 指针置为空,表示初始时有序区为空
   phead->next = NULL;
  // 开始排序循环
   while (1)
   {
     // 每次循环重新从头节点开始遍历,寻找合适的插入位置
     phead = ll->head;
    // 遍历有序区,找到合适的插入位置
     // 条件:当前节点的下一个节点不为空,且待插入节点的年龄大于当前节点和下一个节点的年龄
     while (phead->next != NULL && pinsert->data.age > phead->data.age
            && pinsert->data.age > phead->next->data.age) 
     {
       // 移动到下一个节点
       phead = phead->next;
     }
    // 如果待插入节点的年龄小于头节点的年龄,说明它应该插入到链表头部
     if (pinsert->data.age < phead->data.age)
     {
       // 将待插入节点的 next 指针指向头节点
       pinsert->next = phead;
      // 更新头节点为待插入节点
       ll->head = pinsert;
     }
     else
     {
       // 否则,将待插入节点插入到当前节点和下一个节点之间
       pinsert->next = phead->next;
      // 更新当前节点的 next 指针,使其指向待插入节点
       phead->next = pinsert;
     }
    // 更新待插入节点为下一个待处理节点
     pinsert = pnext;
    // 如果待插入节点为空,说明所有节点都已插入完成,退出循环
     if (NULL == pinsert) { break; }
    // 保存下一个待处理节点
     pnext = pnext->next;
   }
  // 排序完成,返回 0 表示成功
   return 0;
 }
二.双向链表
【1】从头插入
【2】打印链表,可以从有,可以从尾

【3】尾插

【4】按位置插入


