Linux-数据结构-单链表练习-双链表

一.单链表练习和一些功能实现

【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】按位置插入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值