数据结构----链表及其基本操作

数据结构----链表

链表有查找 删除 插入 排序 等等一系列的操作



//首先还是要先从定义开始
#include<stdio.h>
#include<stdlib.h>
struct kk {
    int sum;//存储数值
    struct kk *m;//指针从而指向下一个结构体
};

void *hh(struct kk *he)//此函数为删除链表的内存
{
    struct kk *n1,*n2;
    n1=n2=NULL;
    n1=he;
    //每次循环渐进删除,直到最后一项,退出循环后,再单独删除
    while(n1->m!=NULL)
    {
        n2=n1->m;
        n1->m=n2->m;
        free(n2);
    }
    free(he);
    return NULL;
}


##  排序
//链表可以像数组一样也可以对其中的值进行排序(升序或降序)
//由于链表每次比较都要遍历,所以我感觉选择排序和冒泡排序没有时间差距吧(这个不怎么确定)
//但是下面我是用的冒泡排序
void sj(struct kk *mm)
{
    //因为用到了函数,所以还是要定义两个指针来进行比较大小
    struct kk *n1,*n2;
    for(n1=mm; n1!=NULL;n1=n1->m)
    {
        for(n2=n1->m;n2!=NULL;n2=n2->m)
        {
            struct kk huan;
            if(n1->sum > n2->sum)
            {
                huan.sum=n1->sum;
                n1->sum=n2->sum;
                n2->sum=huan.sum;
            }
        }
    }
}



int main()
{

//这个地方我们是先建立了四个简单的结构体 a b c d ,然后用他们的指针
//先关联就是一个链表
    struct kk *a,*b,*c,*d;
    //先定义几个结构体指针   然后利用malloc分配内存
    a=(struct kk *)malloc(sizeof(struct kk));
    b=(struct kk *)malloc(sizeof(struct kk));
    c=(struct kk *)malloc(sizeof(struct kk));
    d=(struct kk *)malloc(sizeof(struct kk));
    //接下来,对结构体指针内的变量赋值
    a->sum=4;
    b->sum=8;
    c->sum=2;
    d->sum=10;
    struct kk *p=NULL;//在定义一个空指针指向头节点
    p=a;
    //后面的指针分别指向下个结构体
    a->m=b;
    b->m=c;
    c->m=d;
    d->m=NULL;//最后一项的·指针指向NULL
    
    //链表的插入删除
    1.插入(这里以 e 插入在 b 和 c 之间为例)
    struct kk * e;
    e=(struct kk *)malloc(sizeof(struct kk));
    e->sum=100;
    e->m=c->m;
    c->m=e;
    
    2.删除(这里以删除 b 为例)
    a->m=b->m;


    ## 查找(这里以找到数值“8”为例)
    while(p!=NULL)
    {
    if(p->sum==8)
    printf("找到了");
    p=p->m;
    }


    ##输出链表数值
    //可以循环输出链表的值,
    while(p!=NULL)//括号内可以写p!=NULL或者单独的一个 p
    {
        printf("%d ",p->sum);
        p= p->m;
    }
    system("pause");
    return 0;
    
}


以上就是我所知道的,内容如有错还请指出,谢谢。


后续还会有更多的相关数据结构的学习有关的文章,请关注后续的文章。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值