zoukankan      html  css  js  c++  java
  • C语言实现线性表

    
    
    #include <stdio.h>
    #include <stdlib.h> //提供malloc()原型
    /*
        线性表需要的方法:
        1、 List MakeEmpty():初始化一个空线性表
        2、 EementType FindKey(int K, List L):根据位序K,返回相应元素
        3、 int Find(ElementType X,List L): 在线性表L中查找X的第一次出现位置
        4、 void Insert(ElementType X,int i,List L): 在位序i前插入一个新元素X
        5、 void Delete(int i , List L): 删除指定位序i的元素
        6、 int Length(List L):返回线性表L的长度n
    */
    #define MAXSIZE 20
    //define 预处理器指令,定义常量
    
    typedef struct LNode *List;
    typedef int ElementType;
    //定义数据结构的自定义名称
    
    struct LNode{
        ElementType Data[MAXSIZE];//定义一个数组
        int Last;                 //数组中最后一个元素位置
    };
    
    struct LNode L;  //声明一个struct LNode 型的变量L
    List PtrL;//声明一个struct LNode * 型的指针变量PtrL
    
    
    //-> 间接运算符,与一个指向结构或联合的指针一起使用,标识该结构或联合的一个成员
    //访问下标为i的元素方法 L.Data[i] 或者 PtrL->Data[i]
    
    
    List MakeEmpty()
    /*初始化,建立空的顺序表*/
    {
        List PtrL;
        PtrL = (List )malloc(sizeof(struct LNode)); //使用malloc()为结构分配足够的内存空间,并设置PtrL指向该位置
        if(NULL == PtrL)
            //malloc()是否成功请求到内存
        {
            printf("内存分配失败!");
            exit(EXIT_FAILURE);   //EXIT_FAILURE的值也被定义在stdlib.h中。标准提供了两个返回值以保证在所有操作系统中都能正常工作:EXIT_SUCCESS(或者,相当于 0)表示普通的程序结束, EXIT_FAILURE 表示程序异常中止。
        }
        PtrL->Last = -1;
        return PtrL;    //返回结构指针
    }
    
    
    int Find(ElementType X, List PtrL)
    /*查找*/
    {
        int i = 0;  //声明并初始化变量i
        while (i <= PtrL->Last && PtrL->Data[i]!=X) //i 小于等于数组元素数量并且数组i位置的元素与X不相等
        {
            i++;//i递增1
        }
        if(i > PtrL->Last)//如果i大于了数组元素的数量
        {
            return -1; //未找到
        }
        else
        {
            return i;//否则返回i
        }
    }
    
    void Insert(ElementType X, int i, List PtrL)
    /*插入*/
    {
        int j;//声明变量j
        if (PtrL->Last == MAXSIZE-1)
        {
            printf("表空间已满!");
            return;
        }
        if (i < 1 || i > PtrL->Last+2)
        {
            printf("非法位置");
            return;
        }
        for (j=PtrL->Last;j>=i-1;j--)//j初始化为数组元素长度,如果j大于等于i-1,
        {
            PtrL->Data[j+1] = PtrL->Data[j]; //将数组 j 位置的元素位置向后移动一位
        }
        PtrL->Data[i-1]=X; //在i-1的位置插入X
        PtrL->Last++;  //Last指向最后元素
        return;
    }
    
    void Delete(int i,List PtrL)
    /*删除*/
    {
        int j;
        if(i < 1 || i > PtrL->Last+1)
        {
            printf("%d元素不存在",i);
            return;
        }
        for (j = i; i<= PtrL->Last;j++)
        {
            PtrL->Data[j-1] = PtrL->Data[j];  //将i位置的元素移动到i-1的位置
        }
        PtrL->Last--;    //Last指向最后元素
        return;
    }
    
    
    
    
    int main(int argc,char const *argv[])
    {
        MakeEmpty();//初始化
        int n = 10;
        int i = 1;
        int get_find;
    
        for (;i<=n;i++)
        {
            Insert(i,i,&L); //插入元素
        }
    
        for (i=0;i<n;i++)
        {
            printf("%d",L.Data[i]); //打印插入的元素
        }
    
        printf("
    ");
    
        get_find=Find(5,&L);//查找5的位置
        printf("%d",get_find);//打印查找的位置
    
        printf("
    ");
    
        Delete(5,&L);//删除元素5
    
        for (i=0;i<n-1;i++)
        {
            printf("%d",L.Data[i]); //打印插入的元素
        }
    
        return 0;
    
    }
  • 相关阅读:
    Java程序员:一整个项目的具体开发流程介绍
    JAVA常用API整理
    Java开发人员必知必会的20种常用类库和API
    SpringBoot_web开发【实验】-员工列表-链接高亮&列表完成
    luogu P1754 球迷购票问题 |动态规划
    luogu P1566 加等式 |背包问题方案数
    luogu P1564 膜拜 |动态规划
    luogu P1509 找啊找啊找GF |背包
    P1474 货币系统 Money Systems |背包方案数
    cloudera安装报错 socket.gaierror: [Errno -2] Name or service not known
  • 原文地址:https://www.cnblogs.com/flashBoxer/p/9375319.html
Copyright © 2011-2022 走看看