预备役第二周总结

这一周的主要学习目标是链表。链表这个名词很形象地体现出了它的运作方式,它将一个个的节点(元素)串联起来,看起来就和一条铁链一样。每个节点都有自己的位置和数据,因此,链表的节点一般由数据域和指针域组成。我比较喜欢尾插法这种连接方式(因为觉得稍微容易理解),它的大概意思就是在链表的尾端加上新的节点(元素)。下面来看实现的方式

首先来个结构体  

typedef struct Node{
    int data;//数据域
    struct Node*next;//指针域
}node;

接着,咱还要一个链表的开头和几个要用的变量(后面再说)

node*head,*r,*p;//因为前面用了typedef,所以我们可以用node来代替struct Node

接下来,我们就要用一个void函数来进行操作了

void creat(){
    head = (node*)malloc(sizeof(node));//用malloc函数申请一个node*类型node内存大小的空间
    head->next = NULL;一定要记得初始化指针变量,不然你都不知道它会指向哪里
    p = head;//由于head是头,没有头整个链表都会出大事,所以头不能动,此时,p就可以代替head遍历整个链表,你可以把p看成和传教士差不多的东西
    for(int i=0;i<n;i++){
        r = (node*)malloc(sizeof(node));//r是一个新的结点(元素),老样子,先申请空间
        r->next = NULL;//初始化
        scanf("%d",%r->data);//r的数据域
        p->next = r;前一个结点的指针域设为当前新建结点的地址
        p = p->next;//把p设为p->next,作为下个结点的前一个节点
    }
}

至此,咱们的链表就创建完毕了,接下来是使用

int main()
{
    scanf("%d",&n);
    creat();
    p = head->next;//老规矩,头不能动,传教士来代替
    while(p!=NULL) {
        r = p;
        p = p->next;
        free(r);//释放掉r(咱是有诚信的人,申请借来的东西要还回去)
    }
    free(head);//头也要还啊
    return 0;
}

可能中间会有一些小瑕疵,但是总体的思路是这样没错,对于链表,我的掌握还远远不够。可能会有细心的人已经发现链表和数组有点相似,咱下周还来,顺便说说链表与数组的相似之处以及各自的优缺点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值