zoukankan      html  css  js  c++  java
  • C/C++版数据结构之链表<一>

          链表主要就单链表、循环链表和双向链表3种链表进行讨论。

    一、单链表

         概念:所谓单链表,是指数据结点是单向排列的。一个单链表结点,其结构类型分为两部分:

                 (1)数据域:用于存储数据元素的值。

                 (2)指针域(链域):用于存储下一个结点地址或者说指向其直接后继结点的指针。

         算法:

    一般声明3个指针来操作链表:

    head:用来指向链表的头部。链表需要一个指针来标识链表,这就是头指针。

    p1:用来指向新结点,以及用来遍历链表的每一个结点。

    p2:用来指向当前结点。

    (1)单链表创建算法

    创建结点数目为n的链表:

    复制代码
    #include <malloc.h>
    typedef struct node { int num; //数值域 struct node *next; //指针域}stud;
    stud* Create(int n) { stud *head,*p1,*p2; head=p1=p2=NULL; for(int i=0;i<n;i++) { p1=(stud*)malloc(sizeof(stud)); p1->num=i; if(i==0) { head=p1; } else { p2->next=p1; } p2=p1; } p2->next=NULL; return head; }
    复制代码

    (2)单链表的查找算法

    在头指针为head的单链表中查找i:

    复制代码
    typedef struct node {     int num;     struct node *next; }stud;
    stud* Find(stud *head,int i) { stud *p1; //遍历链表指针 p1=head; while(p1!=NULL) { if(i==p1->num) { break; } else { p1=p1->next; } } return p1; }
    复制代码

    (3)单链表删除算法

    在头指针为head的单链表中删除i:

    复制代码
    #include <malloc.h>
    typedef struct node { int num; struct node *next; }stud;
    bool Delete(stud *head,int i) { bool flag=false; if(head) //不是空链表 { stud *p1,*p2; p1=head; while(p1->num!=i && p1->next!=NULL) { p2=p1; p1=p1->next; } if(p1->num==i) { if(p1==head) { head=head->next; } else { p2->next=p1->next; } free(p1); //释放已经脱离链表的结点内存 flag=true; } } return flag; }
    复制代码

    (4)单链表插入算法

    在头指针为head的单链表中插入结点p:(假设这是一个由小到大排序的有序链表)

    复制代码
    typedef struct node {     int num;     struct node *next; }stud;
    stud* Insert(stud *head,stud *p) { stud *p1,*p2; p1=head;
    if(!head) { head=p; head->next=NULL; } else { while(p->num > p1->num && p1->next!=NULL) { p2=p1; p1=p1->next; } if(p->num < p1->num) { if(head==p1) { head=p; p->next=head; } else { //把p插入p2和p1之间 p2->next=p; p->next=p1; } } else { //把p插入链表的尾部,此时p1指向尾部结点 p1->next=p; p->next=NULL; } } return head; }
    复制代码
    诗意般生活 活出生命的精彩

  • 相关阅读:
    mybatis:mybatis再总结
    shiro:RememberMe
    shiro:session管理
    shiro:缓存管理
    shiro:授权管理
    shiro:密码加密(加密、加盐加密)
    spring:spring再总结(ioc、aop、DI等)
    SpringBoot:整合layui、退出功能
    layui:内置模块(日期与时间、数据表格)
    nuxtjs中配置配置env
  • 原文地址:https://www.cnblogs.com/ly0311/p/2687855.html
Copyright © 2011-2022 走看看