l链表的总结

就快要参加考核了,总结一下学的链表内容,加深记忆,,啊啊啊,为什么考核呢,我还是个宝宝。

静态链表

把线性表的元素存放在数组中,这些元素通过逻辑关系来进行连接。数组单元存放链表结点,结点的链域(链就是代表指针,是下一元素的地址,链表中一个结点可以分为两个部分,一个指针域用来存放指针,另一个数据域用来存放数据。单链表中一个指针域存放一个指针,双链表中两个指针域存放一个指针)指向下一个元素的位置,及下一个元素所在的数组单元的下标。

优点,可以方便的进行大量的删除和插入工作。

单向链表(单链表)

链接方向是单向的,对链表的访问要通过顺序读取从头部开始。

由于链表的每个结点都包含数据域和指针域,即每个节点都要包含不同类型的数据,所以节点的数据类型必须选用结构体类型,其中必须有一个成员是指向本结构体类型的指针类型。类型定义中,经常会采用递归调用。

struct film{
    char title[TSIZE];
    int rating;
    struct film*next;      //指向链表中的下一个结构
    };
struct film{
    char title[TSIZE];
    int rating;
    struct film*next;      //指向链表中的下一个结构
    };

这就是两个创建示例。

struct film{
    char title[TSIZE];
    int rating;
    struct film*next;      //指向链表中的下一个结构
    };




    int icount;    //全局变量表示链表的长度
    struct student *create()
    {
        struct student *phead=NULL;  //初始化链表为空
        struct student *pend,*pnew;
        icount=0;    //初始化链表长度
        pend=pnew=(stuct student*)malloc(sizeof(struct student));   //动态为节点分配内存
        scanf("%d",pnew->cname);
        scanf("%d",&pnew->inumber);  //这里要用到取地址符因为不是读取到数组里
        while(pnew->inumber)
        {
            icount++;
            if(icount==1)      //从头开始创建这个链表,此时是头结点
            {
                pnew->next=phead;      //是指针指向为空
                pend=pnew;    //跟踪新加入的节点
                phead=pnew;   //头指针指向首节点
            }
            else
            {
                pnew->next=NULL;        //新节点的指针为空
                pend->next=pnew;        //原来的结点指向新节点
                pend=pnew;              //pend指向新节点
            }
            pnew=(struct student *)malloc(sizeof(struct student));   //再次分配节点的内存空间
            scanf("%s",pnew->cname);
            scanf("%d",&pnew->inumber);
        }
        free(pnew);
        return phead;     //释放节点空间

    }       _________静态链表的创建

循环的单向链表在查找一个元素的时候,每次都需要从头开始遍历,循环单向链表从任意一个元素开始,都可以循环找到每一个元素。那么怎样判断有没有循环呢?可参考如下的代码:

bool isloop(node *h)
{
    node *p=h;
    node *q=h->next;
    while(p&&q&&q->next&&p!=q)
    {
       p=p->next; 
       q=q->next->next; 
    }
    if(p==q)
    {
        return true;
    }
}

//如果是循环链表,p,q就能够相遇。

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值