线性表的数组实现基本操作 代码+注释详解

线性表的数组实现基本操作详解

1. 建立空表
2. 查找元素
3. 插入元素
4. 删除元素

结构体

typedef struct LNode *List;
struct LNode{
    ElementType Data [MAXSIZE];
    int Last;//线性表最后一个元素位置
};
struct LNode L;
List Ptrl;

访问下标为i的元素:L.Data[i]或Ptrl->Data[i]
线性表的长度 L.Last+1或Ptrl->Last+1;位置从0开始,所以长度取last+1;

1.建立空表


 List MakeEmpty()
 {
     List Ptrl;//结构的指针
     Ptrl = (List )malloc(sizeof(struct LNode));
     Ptrl->Last=-1;//空表的最后一个元素下标为-1,如果此表中含有一个元素,则last为0,代表这个数组的最后一个元素下标为0
     return Ptrl;
 }

2.查找

查找平均次数(n+1)/2,时间性能O(n)

int Find(ElementType X,List Ptrl)//线性表结构指针
{
    int i=0;
    while(i<=Ptrl->Last&&Ptrl->Data[i]!=X)//如果data[i]不为X,并且数组中还有元素未比较
      i++;
    if(i>Ptrl->Last)//两种情况:遍历了数组还没有找到
      return -1;
    else//已经找到了
      return i; //返回的是所找元素的数组下标
}

3.插入

时间复杂度O(n)

insert(ElementType X,List Ptrl,int i)//i是数组第i个数字,对应的下标是i-
{
    int j;
    if(Ptrl->Last==MAXSIZE-1 )//最后一个元素下标是MaxSize-1
      printf("表满")if(i<1||i>Ptrl->Last+2)//小于第一个位置(头插)大于最后一个位置+1(尾插)
      Ptrl->Data[j+1]=Ptrl->Data[j];//为了空出第i个位置,要把原来从i位置到最后一个位置的数字倒序向后挪
    Ptrl->Data[i-1]=X;
    Prtl->Last++;//最后一个元素下标+1
    return ;
}

4,删除

时间复杂度O(n);

delete(ElementType X,List Ptrl,int i)//i对应的是删除元素的位置,则删除元素对应下标为i-1

  if (i<1||i>Ptrl->Last+1)//当删除位置i小于第一个位置或大于最后一个位置(数组的长度last+1),不合法
    printf("位置错误")else
 {
     int j;
     for(j=i;j<=Ptrl->Last;j++)
       Ptrl->Data[j-1]=Ptrl->Data[j];
    Ptrl->Last--;
    return ;
 }

完整代码

#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 100
#define ElementType int
typedef struct LNode *List;
struct LNode{
    ElementType Data [MAXSIZE];
    int Last;//线性表最后一个元素
};
struct LNode L;
List Ptrl;
 
 List MakeEmpty()
 {
     List Ptrl;//结构的指针
     Ptrl = (List )malloc(sizeof(struct LNode));
     Ptrl->Last=-1;//空表的最后一个元素下标为-1,如果此表中含有一个元素,则last为0,代表这个数组的最后一个元素下标为0
     return Ptrl;
 }

int Find(ElementType X,List Ptrl)//线性表结构指针
{
    int i=0;
    while(i<=Ptrl->Last&&Ptrl->Data[i]!=X)//如果data[i]不为X,并且数组中还有元素未比较
      i++;
    if(i>Ptrl->Last)//两种情况:遍历了数组还没有找到
      return -1;
    else//已经找到了
      return i; //返回的是所找元素的数组下标
}

insert(ElementType X,List Ptrl,int i)//i是数组第i个数字,对应的下标是i-
{
    int j;
    if(Ptrl->Last==MAXSIZE-1 )//最后一个元素下标是MaxSize-1
      printf("表满")if(i<1||i>Ptrl->Last+2)//小于第一个位置(头插)大于最后一个位置+1(尾插)
      Ptrl->Data[j+1]=Ptrl->Data[j];//为了空出第i个位置,要把原来从i位置到最后一个位置的数字倒序向后挪
    Ptrl->Data[i-1]=X;
    Prtl->Last++;//最后一个元素下标+1
    return ;
}

delete(ElementType X,List Ptrl,int i)//i对应的是删除元素的位置,则删除元素对应下标为i-1

  if (i<1||i>Ptrl->Last+1)//当删除位置i小于第一个位置或大于最后一个位置(数组的长度last+1),不合法
  printf("位置错误")else
 {
     int j;
     for(j=i;j<=Ptrl->Last;j++)
       Ptrl->Data[j-1]=Ptrl->Data[j];
    Ptrl->Last--;
    return ;
 }

猜你喜欢

转载自blog.csdn.net/qq_45955041/article/details/106948782
今日推荐