数据结构---线性表

线性表

//主要基本操作(创销、增删改查)
InitList(&L):初始化表。构造一个空的线性表。
DestroyList(&L):销毁操作。销毁线性表,并释放线性表L所占用的内存空间。
ListInset(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e
ListDelete(&L,i,&e):删除操作。删除表L中的第i个位置元素,并用e返回删除元素的值。
LocateElem(L,e):按值查找操作。在表L中查找具有给定关键字值的元素。
GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。
//其他常用操作
Length(L):求表长。返回线性表L的长度,即L中数据元素的个数。
Empty(L):判空操作。若L为空表,则返回true,否则返回false。
PrintList(L):输出操作。按前后顺序输出线性表L的所有元素值。

顺序表

静态分配

 1. #define MaxSize 50               //定义线性表最大的长度
 2. typedef struct{
   
 3.    ElemType data[MaxSize];       //顺序表的元素
 4.    int length;                   //顺序表的当前长度
 5. }SqList;

初始化(静态分配)

 1. void InitList(SqList &L){
   
 2.    for(int i=0;i<MaxSize;i++)
 3.       L.data[i]=0;                  //将所有数据元素设置为默认值
 5.    L.length=0;                      //顺序表初始长度为0
 6. }

动态分配

 1. #define InitSize 100             //表长度的初始定义
 2. typedef struct{
   
 3.    ElemType *data;               //指示动态分配数组的指针
 4.    int MaxSize,length;           //数组的最大容量和当前个数
 5. }SeqList;

初始化(动态分配)

 1. viod InitList(SeqList &L){
                         //用malloc函数申请一片连续的存储空间
 2.    L.data=(int *)malloc(InitSize*sizeof(int));
 3.    L.lebgth=0;
 4.    L.MaxSize=InitSize;
 5. }

增加长度(动态分配)

 1. void IncreaseSize(SeqList &L,int len){
   
 2.    int *p=L.data;
 3.    L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
 4.    for(int i=0;i<L.length;i++){
   
 5.       L.data[i]=p[i];
 6.    }
 7.    L.MaxSize=L.MaxSize+len;
 8.    free(p); 
 9. }

插入操作

 1. bool ListInsert(SqList &L,int i,ElemType e){
   
 2.    if(i<1||i>L.length+1)                       //判断i的范围是否有效
 3.        return false;
 4.    if(L.length>=MaxSize)                       //当前存储空间已满,不能插入
 5.        return false;
 6.    for(int j=L.length;j>=i;j--)                //将第i个元素及之后元素后移
 7.        L.data[j]=L.data[j-1];
 8.    L.data[i-1]=e;
 9.    L.length++;
 10.   return true;
 11. } 

删除操作

 1. bool ListDelete(SqList &L;int i;ElemType &e){
   
 2.    if(i<1||i>L.length)                          //判断i的位置是否有效
 3.       return false;
 4.    e=L.data[i-1];                               //将被删除的元素赋值给e
 5.    for(int j=i;j=<L.length;j++)                 //将第i个位置后的元素前移
 6.       L.data[j-1]=L.data[j];
 7.    L.length--;                                  //线性表的长度减1
 8.    return true;
 9. }

按值查找

 1. int LocateElem(SqList L;ElemType e){
   
 2.    int i;
 3.    for(i=0;i=<L.length;i++)
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
线性表是一种常见的数据结构,它表示具有相同数据类型的一组元素的有序序列。线性表中的元素之间存在一种顺序关系,每个元素都有一个前驱和一个后继(除了第一个元素没有前驱,最后一个元素没有后继)。线性表可以用顺序存储结构或链式存储结构实现。 在顺序存储结构中,线性表的元素按照顺序存储在连续的内存空间中,可以通过元素的下标来访问和操作元素。插入或删除元素时,需要移动其他元素,因此操作的时间复杂度较高。 链式存储结构中,线性表的每个元素都包含一个数据域和一个指针域,指针指向下一个元素。通过指针的链接,元素可以按照任意顺序存储在内存中,插入和删除操作只需要改变指针的指向,因此时间复杂度较低。 线性表常见的操作包括插入、删除、查找、获取长度等。其中插入和删除操作需要注意保持线性表的顺序关系。 常见的线性表有数组、链表、栈和队列。数组是最简单的线性表,通过下标可以直接访问元素;链表是动态存储结构,插入和删除操作方便,但访问元素需要遍历链表;栈是一种特殊的线性表,只允许在表的一端进行插入和删除操作;队列也是一种特殊的线性表,只允许在表的一端进行插入操作,在另一端进行删除操作。这些数据结构在实际应用中都有各自的应用场景和优缺点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cforikl_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值