C/C++知识点之C语言实现线性表
小标 2018-08-10 来源 : 阅读 1550 评论 0

摘要:本文主要向大家介绍了C/C++知识点之C语言实现线性表,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C语言实现线性表,通过具体的内容向大家展示,希望对大家学习C/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("\n");

    get_find=Find(5,&L);//查找5的位置
    printf("%d",get_find);//打印查找的位置

    printf("\n");

    Delete(5,&L);//删除元素5

    for (i=0;i<n-1;i++)
    {
        printf("%d",L.Data[i]); //打印插入的元素
    }

    return 0;

}    

本文由职坐标整理并发布,了解更多内容,请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 2 不喜欢 | 0
看完这篇文章有何感觉?已经有2人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved