当储存一组数的时候可以使用 数组。
但是当有一串已经从小到大排好的数时,
如果想要在其中间插入一个数, 则不如使用链表
如何实现链表呢?
在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; // 继续下一个结点
}
//输出链表所有的数