管中窥豹---链表初学习

   当储存一组数的时候可以使用 数组。

   但是当有一串已经从小到大排好的数时,

   如果想要在其中间插入一个数, 则不如使用链表

 如何实现链表呢?

在C语可以使用指针和malloc函数来实现。(注意malloc函数需要头文件<stdlib.h>)

由于链表之间要有相关联的属性,

因此不妨使用结构体来构建链表(当然可以用两个数组来组成模拟链表),

代码实现如下:

#include <bits/stdc++.h>  // 偷懒用个万能头文件QwQ
using namespace std;
struct lianbiao  //    建立结构体 包含数据data和指向下一个结点的指针next
{int data;
struct lianbiao *next;
};

int main()
{
    lianbiao *p,*q,*head=NULL,*temp;  //头指针初始为空
    int n,a;
    cin>>n;
    for(int i=0;i<n;i++) //for 循环实现输入多个数据
    {
        cin>>a;
        p=(lianbiao *)malloc(sizeof(lianbiao));// 动态分配内存函数  实现节点内存的申请
        p->data=a   ;  数据存储到当前结点的data域中
        p->next=NULL; //生成的结点的下一个结点指向空(NULL)
        if(head==NULL)
        head=p;    //   如果是第一个结点,将头指针指向该结点
        else q->next=p;//不是创造的第一个结点,将上一个结点的后继指针指向该结点。
        q=p;  //q代表上一个结点 ,将其也指向当前结点(如此迭代实现结点之间的相互连接)
    }

找到插入的数应该所处的位置。

temp=head;    // 从链表头部开始遍历。
    cin>>a;   //   输如待插入的数据
    while(temp!=NULL)   //  当未到链表尾部时循环
    {
        if(temp->next==NULL||temp->next->data>a) 

//找到插入的数应该所处的位置(中间或者末尾)
        {
            p=(lianbiao *)malloc(sizeof(lianbiao)); //申请空间
        p->data=a;  //    插入数据到新增结点

        p->next=temp->next;   //新增结点的后继指针指向当前结点的后继指针
        temp->next=p;     //  当前结点的后继指针指向新增结点
        break;  //结束循环
        }
        temp=temp->next;    // 继续下一个结点
        
    }

//输出链表所有的数

 temp=head;//重新遍历
    while(temp!=NULL)
    {
        cout<<temp->data;输出下一个数
        temp=temp->next;//继续下一个结点
        
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值