1.1数组线性表[线性结构]

  • 利用数组的连续存储空间顺序存放线性表的各元素




主要操作的实现:

// 1.1数组线性表[线性结构]

#define MAXSIZE 100  // MAXSIZE 定义为 Data 数组的大小
typedef int ElementType;  // ElementType 可定义为任意类型
typedef struct LNode *List; 
struct LNode{
ElementType Data[MAXSIZE]; 
int Last;  // Last 定义线性表的最后一个元素
};

List MakeEmpty(); //初始化顺序表 
int Find(ElementType X,List L); //查找 X 第一次出现的下标 
void Insert(ElementType X,int i,List L); //在下标为 i 的地方插入 X 
void Delete(int i,List L);   //删除下标为 i 的当前值 
ElementType FindKth(int K,List L);  //返回下标为 K 的当前值
int Length(List L);  //返回顺序表的长度 


// 初始化
List MakeEmpty()
{
    List L;
    L = (List)malloc(sizeof(struct LNode));
    L->Last = -1;

    return L;
}

// 按值差找
int Find(ElementType X, List L)
{
    int cnt=0;
    while(cnt <= L->Last && L->Data[cnt] != X)  cnt++;
    if(cnt > L->Last)  return -1;
    else return cnt;
    return 0;
}

// 插入
void Insert(ElementType X, int i, List L)
{
    int j;
    if(L->Last == MAXSIZE-1)  
    {
        cout << "表已满" << endl;
        return;
    }
    else if(i<0)
    {
        cout << "位置不合法" << endl;
        return;
    }
    for(int j=L->Last; j>=i; j--)  L->Data[j+1] = L->Data[j];
    L->Data[i] = X;
    L->Last++;
    return;
}

// 删除
void Delete(int i, List L)
{
    int j;
    if(i<0 || i>L->Last)
    {
        cout << "位置不合法" << endl;
        return;
    }
    for(int j=i; j<L->Last; j++)  L->Data[j] = L->Data[j+1];
    L->Data[L->Last] = NULL;
    L->Last--;
    return;
}

// 按序差找
ElementType FindKth(int K,List L)
{
    if(K<0 || K>L->Last)
    {
        cout << "位置不合法" << endl;
        return NULL;
    }
    return L->Data[K];
}

// 表长
int Length(List L)
{
    return L->Last+1;
}