• 数据结构之链表


    数据结构。之。链表的实现。

    基础篇;

    链表的建立和输出:

    #include <stdio.h>
    //顺序表的定义:
    #define ListSize 100        //表空间大小可根据实际需要而定,这里假设为100
    typedef int DataType;        //DataType可以是任何相应的数据类型如int, float或char
    typedef struct
    {    DataType data[ListSize];    //向量data用于存放表结点
        int length;                //当前的表长度
    }SeqList;
    
    void main()
    {
        SeqList L;
        int n=5,i,x;                //欲建立的顺序表长度
        L.length=0;
        void CreateList(SeqList *L,int n);
        void PrintList(SeqList L,int n);
        int LocateList(SeqList L,DataType x);
        CreateList(&L,n);        //建立顺序表
        PrintList(L,n);            //打印顺序表
    
    }
    
    //顺序表的建立:
    void CreateList(SeqList *L,int n)
    {    int i;
        for (i=0;i<n;i++)
            scanf("%d",&(*L).data[i]);
    //    printf("%d  
    
    ",(*L).data[i]);
        (*L).length=n;
    /*    for (i=0;i<n;i++)
            printf("%d  ",L.data[i]);*/
    }
    
    //顺序表的打印:
    void PrintList(SeqList L,int n)
    {    int i;
        for (i=0;i<n;i++)
            printf("%d  ",L.data[i]);
        printf("%d  ",i);
        printf("
    ");
    }
    View Code

    链表的查找:

    #include <stdio.h>
    #include <stdlib.h>
    //顺序表的定义:
    #define ListSize 100        //表空间大小可根据实际需要而定,这里假设为100
    typedef int DataType;        //DataType可以是任何相应的数据类型如int, float或char
    typedef struct
    {    DataType data[ListSize];    //向量data用于存放表结点
        int length;                //当前的表长度
    }SeqList;
    
    void main()
    {
        int LocateList(SeqList L,DataType x);
        void PrintList(SeqList L,int n);
        SeqList L;
        int i,n=10,x;
        for (i=0;i<n;i++)//随机取值
            L.data[i]=rand()%100;
        L.length=n;
        PrintList(L,n);            //打印顺序表
        printf("输入要查找的值:");
        scanf("%d",&x);
        i=LocateList(L,x);        //顺序表查找
        if (i==0)
            printf("未找到%d!
    ",x);
        else
            printf("找到%d,在第%d个位置上!
    ",x,i);
    }
    
    //顺序表的查找:
    int LocateList(SeqList L,DataType x)
    {    int i=0;
        while (i<L.length && L.data[i]!=x)   
            ++i;
        if (i<L.length) return i+1;
        else return 0;
    }
    
    //顺序表的打印:
    void PrintList(SeqList L,int n)
    {    int i;
        for (i=0;i<n;i++)
            printf("%d  ",L.data[i]);
        printf("
    ");
    }
    View Code

    链表的插入:

    #include <stdio.h>
    #include <stdlib.h>
    //顺序表的定义:
    #define ListSize 100        //表空间大小可根据实际需要而定,这里假设为100
    typedef int DataType;        //DataType可以是任何相应的数据类型如int, float或char
    typedef struct
    {    DataType data[ListSize];    //向量data用于存放表结点
        int length;                //当前的表长度
    }SeqList;
    
    void main()
    {
        void InsertList(SeqList *L,DataType x,int i);
        void PrintList(SeqList L,int n);
        SeqList L;
        int i,n=10;
        DataType x;
        for (i=0;i<n;i++)
            L.data[i]=rand()%100;
        L.length=n;
        PrintList(L,n);            //打印顺序表
        printf("输入要插入的位置:");
        scanf("%d",&i);
        printf("输入要插入的元素:");
        scanf("%d",&x);
        InsertList(&L,x,i);        //顺序表插入
        PrintList(L,n);            //打印顺序表
    }
    
    //顺序表的插入:
    void InsertList(SeqList *L,DataType x,int i)
    {//将新结点x插入L所指的顺序表的第i个结点的位置上
        int j;
        if (i<1 || i>(*L).length+1)
        {
            printf("插入位置非法");
            exit(0);
        }
        if ((*L).length>=ListSize)
        {
            printf("表空间溢出,退出运行");
            exit(0);
        }
        for (j=(*L).length-1;j>=i-1;j--)
            (*L).data[j+1]=(*L).data[j];
        (*L).data[i-1]=x;
        (*L).length++;
    }
    
    //顺序表的打印:
    void PrintList(SeqList L,int n)
    {    int i;
        for (i=0;i<L.length;i++)
            printf("%d  ",L.data[i]);
        printf("
    ");
    }
    View Code

    链表的删除:

    #include <stdio.h>
    #include <stdlib.h>
    //顺序表的定义:
    #define ListSize 100        //表空间大小可根据实际需要而定,这里假设为100
    typedef int DataType;        //DataType可以是任何相应的数据类型如int, float或char
    typedef struct
    {    DataType data[ListSize];    //向量data用于存放表结点
        int length;                //当前的表长度
    }SeqList;
    
    void main()
    {
        void DeleteList(SeqList *L,int i);
        void PrintList(SeqList L,int n);
        SeqList L;
        int i,n=10;
        for (i=0;i<n;i++)
            L.data[i]=rand()%100;
        L.length=n;
        PrintList(L,n);            //打印顺序表
        printf("输入要删除的位置:");
        scanf("%d",&i);
        DeleteList(&L,i);        //顺序表删除
        PrintList(L,n);            //打印顺序表
    }
    
    //顺序表的删除:
    void DeleteList(SeqList *L,int i)
    {//从L所指的顺序表中删除第i个结点
        int j;
        if (i<1 || i>(*L).length)
        {
            printf("删除位置非法");
            exit(0);
        }
        for (j=i;j<=(*L).length-1;j++)
            (*L).data[j-1]=(*L).data[j];
        (*L).length--;
    }
    
    //顺序表的打印:
    void PrintList(SeqList L,int n)
    {    int i;
        for (i=0;i<L.length;i++)
            printf("%d  ",L.data[i]);
        printf("
    ");
    }
    View Code

    然后,是大集合,把之前的都合到一起;

    #include <stdio.h>
    #include <stdlib.h>
    
    //顺序表的定义:
    #define ListSize 100        //表空间大小可根据实际需要而定,这里假设为100
    typedef int DataType;        //DataType可以是任何相应的数据类型如int, float或char
    typedef struct
    {    DataType data[ListSize];    //向量data用于存放表结点
        int length;                //当前的表长度
    }SeqList;
    
    //顺序表的建立:
    void CreateList(SeqList *L,int n)
    {    
        int i;
        printf("输入数据:
    ");
        for (i=0;i<n;i++)
            scanf("%d",&(*L).data[i]);
    //    printf("%d  
    
    ",(*L).data[i]);
        (*L).length=n;
    /*    for (i=0;i<n;i++)
            printf("%d  ",L.data[i]);*/
    }
    
    //顺序表的打印:
    void PrintList(SeqList L,int n)
    {    int i;
        for (i=0;i<n;i++)
            printf("%d  ",L.data[i]);
        printf("
    ");
        printf("链表长度是:%d
    ",i);
    }
    //顺序表的查找:
    int LocateList(SeqList L,DataType x)
    {    int    i=0;
        while (i<L.length && L.data[i]!=x)   
            ++i;
        if (i<L.length) return i+1;
        else return 0;
    }
    
    //顺序表的插入:
    void InsertList(SeqList *L,DataType x,int i)
    {//将新结点x插入L所指的顺序表的第i个结点的位置上
        int j;
        if (i<1 || i>(*L).length+1)
        {
            printf("插入位置非法");
            exit(0);
        }
        if ((*L).length>=ListSize)
        {
            printf("表空间溢出,退出运行");
            exit(0);
        }
        for (j=(*L).length-1;j>=i-1;j--)
            (*L).data[j+1]=(*L).data[j];
        (*L).data[i-1]=x;
        (*L).length++;
    }
    
    //顺序表的删除:
    void DeleteList(SeqList *L,int i)
    {//从L所指的顺序表中删除第i个结点
        int j;
        if (i<1 || i>(*L).length)
        {
            printf("删除位置非法");
            exit(0);
        }
        for (j=i;j<=(*L).length-1;j++)
            (*L).data[j-1]=(*L).data[j];
        (*L).length--;
    }
    
    void main()
    {
        SeqList L;
        int i,x;
        int n;    //欲建立的顺序表长度
        printf("欲建立的顺序表长度:");
        scanf("%d",&n);
        L.length=0;
        CreateList(&L,n);        //建立顺序表
        PrintList(L,n);            //打印顺序表
        printf("输入要查找的值:");
        scanf("%d",&x);
        i=LocateList(L,x);        //顺序表查找
        if (i==0)
            printf("未找到%d!
    ",x);
        else
            printf("找到%d,在第%d个位置上!
    ",x,i);
        printf("输入要插入的位置:");
        scanf("%d",&i);
        printf("输入要插入的元素:");
        scanf("%d",&x);
        InsertList(&L,x,i);        //顺序表插入
        PrintList(L,n+1);            //打印顺序表
         printf("输入要删除的位置:");
        scanf("%d",&i);
        DeleteList(&L,i);        //顺序表删除
        PrintList(L,n);            //打印顺序表
    }

    适合初学者理解和研究;

  • 相关阅读:
    数据库锁表及阻塞的原因和解决办法
    JS中的this都有什么用?
    vue打包要点
    Vue.js的虚拟dom
    JS继承方式
    JS中的浅拷贝和深拷贝。
    详解计算机原码,反码,补码。
    经常被问到的面试题1
    eslint规则说明
    git常用命令总结
  • 原文地址:https://www.cnblogs.com/yuyixingkong/p/3321619.html
Copyright © 2020-2023  润新知