ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据结构顺序表代码实现

2022-01-12 14:32:23  阅读:261  来源: 互联网

标签:顺序 线性表 int ElemType 代码 length SqList 数据结构 data


数据结构顺序表代码实现

首先顺序表存储容量有两种分配方式

第一张静态分配

typedef int ElemType; //给int类型取别名
#define MaxSize 50  //定义最大长度 
typedef struct{
    ElemType data[MaxSize];  // 存放线性表当中元素的最大容量
    int length;   //存放线性表的长度
}SqList;

第二种动态分配

#define InitSize 100 
typedef struct{
    ElemType *data;     //定义一个动态分配数组指针
    int MaxSize,length;   //数组的最大容量和当前的长度
}SqList;
//动态分配c语句为
//L.data = (ElemType*)malloc(sizeof(ElemType)*InitSize);
//c++语句为
//L.data = new ElemType[InitSize];

现在我们来创建一个顺序表

//数组元素a[0.....n-1]创建顺序表l
void CreateList(SqList *&L,ElemType a[],int n ) //由a中的n个元素创建线性表
{
     int i = 0,k = 0;   //k表示线性表l中元素的个数,初始值为0
    L = (SqList*) malloc(sizeof(SqList)); //分配存放线性表的空间
    while(i<n){
     L->data[k] = a[i];  //将元素a[i]存放到l中
     k++;
     i++;
    }
    L->length = k;
}

初始化线性表

void InitList(SqList *& L)
{
    L = (SqList*) malloc(sizeof(SqList));   //分配线性表的存放空间
    L ->length = 0;   //置空线性表的长度为0
}

销毁线性表

//销毁线性表
void DestroyList(SqList *& L){
    free(L);  //释放l所指的空间
}

判断线性表是否为空表

//判断线性表是否为空表
bool ListEmpty(SqList *L){
    return (L->length ==0);
}

求线性表的长度

//求线性表的长度
int ListLength(SqList *L){
     return (L->length);
}

输出线性表

//输出线性表
void DispList(SqList *L){
    for (int i = 0; i < L->length; i++) {
        printf("%d",L->data[i]);
        printf("\n");
    }
}

求线性表中某个元素的值

bool GetElem(SqList *L,int i ,ElemType &e){
    if(i<1 || i>L->length)
        return false;
    e = L ->data[i-1];//    取到元素的值
    return true;
}

按元素值查找

//按元素值查找
int LocateElem(SqList *L,ElemType e){
    int i = 0;
    while(i<L->length&&L->data[i]!=e)
        i++;
    if(i>=L->length)    //未找到时 返回0
        return 0;
    else
        return i+1;     //注意这里的i指到数组下标 找到之后要返回位序故i+1
}

在第i个位置插入元素

//插入数据元素
bool ListInsert(SqList *&L,int i,ElemType e){
    int j;
    if(i<1 || i>L->length+1)
        return false;
    i--;//将位序转化为数组下标
    for (j = L->length;j>i;j--) {
        L->data[j] = L->data[j-1];  //第i个元素及第i元素以后的元素依次向后移动一位
    }
    L->data[i] = e;
    L->length++;
    return true;
}

删除第i个位置的元素

//删除数据元素
bool ListDelete(SqList *&L,int i ,ElemType &e)
{
    int j;
    if(i<1 ||i>L->length)
        return false;
    i--;           //将位序转化为数组下标
    e = L->data[i];
    for (int j = i; j < L->length-1 ; j++) {
        L->data[j] =L->data[j+1];   //将data[i]之后的元素向前移动一个位置
    }
    L->length--;
    return true;
}

标签:顺序,线性表,int,ElemType,代码,length,SqList,数据结构,data
来源: https://www.cnblogs.com/tyy8/p/15792493.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有