数据结构之顺序线性表

Posted Tanglement

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构之顺序线性表相关的知识,希望对你有一定的参考价值。

数据结构之顺序表

理解

  • 以数组的形式构造顺序线性表
  • 相邻元素之间有物理联系(地址有关系)
  • 与链式表相比,删除、插入比较麻烦
  • 与链式表相比,查找位置的元素的话很快,查找元素的位置一样都得循环
  • 可以从末尾向前循环,也能从任一位置开始向前向后循环

代码

#include <stdio.h>
#include <stdlib.h> 
#define MAXSIDE 100     /*定义MAXSIDE值,线性表的大小*/ 
typedef int ElementType; /*定义元素类型 int double 等*/
typedef int Position;
typedef struct LNode *List;
struct LNode {
    ElementType Data[MAXSIDE];
    Position Last;
};

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

/* 查找 */
#define ERROR -1

Position Find( List L, ElementType X )
{
    Position i = 0;
    while( i <= L->Last && L->Data[i]!= X )
        i++;
    if ( i > L->Last ) return ERROR; /* 如果没找到,返回错误信息*/
    else return i;
} 

/* 插入 */
bool Insert( List L, ElementType X, Position P )
{
    Position i;
    
    if ( L->Last == MAXSIDE-1){
        /* 说明空间已满,不能再插入*/
        printf("线性表已满");
        return false;
    } 
    if ( P<0 || P>L->Last+1 ){
        printf("位置不合法");
        /* 插入给的位置P有问题*/
        return false; 
    }
    /* 将顺序线性表的位置P后的元素向后移(从最后一个元素开始)*/
    for( i=L->Last; i>=P; i--)
        L->Data[i+1] = L->Data[i];
    L->Data[P] = X;
    L->Last++;      /* 表的末位置加一 */
    return true; 
}

/*  删除 */
bool Delete( List L, Position P )
{
    Position i;
    
    if( P<0 || P>L->Last ){
        printf("位置%d不存在元素",P);
        return false;
    }
    /* 将顺序线性表P位置后的每个元素向前移(从P+1位置开始)*/ 
    for( i=P+1; i<=L->Last; i++)
        L->Data[i-1] = L->Data[i];
    L->Last--;
    return true;
}

以上是关于数据结构之顺序线性表的主要内容,如果未能解决你的问题,请参考以下文章

数据结构回顾之顺序存储结构中的线性表(栈与队列顺序线性表实现)

数据结构之线性表之顺序存储Java实现

javascript数据结构之顺序表

数据结构之线性表(顺序表,单链表)——图书管理系统

数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)

常见数据结构之线性表