数据结构线性表的常用操作——顺序表

基本概念

线性表是一种基本的存储结构(数据在计算机中的存储表示)。

分为顺序表和链表,顺序表作为顺序存储结构(俺数组顺序依次存放在一组地址连续的存储单元内),其内部结点a^{i}都有且仅有一个前趋和一个后继。借助元素在存储器中的相对未知来表示数据元素之间的逻辑关系。

在C语言的描述中,一组连续的数组空间--->数组

#define MAXSIZE 100 //数组最大下标
typedef struct{
    ElemType a[MAXSIZE+1];
    int n; //n用来标记元素个数
}sqlist; //sqlist为线性表类型

常见的操作

1.在I处插入新元素

  • 入口判断:存储容量够吗(n<MAXSIZE)?插入位置正确么?(i>=1&&i<=n+1)
  • i位后面的元素后移
  • 在线性表的i处插入新元素
  • 表长度加一
if(L.n=MAXSIZE)
    error("溢出")
if(i<1||i>n+1)
    error("位置错")
for(j=n;j>=1;j++)
    L.a[j+1]=L.a[j];
L.a[i]=x;
n++;

算法分析:元素插入位置和元素移动位置油管,所以无序表最好在表尾插入。

2.有序插入算法

算法要求:在递增有序的表中将X插入到适当位置。

用循环从后向前比较X和列表元素的大小,比X大的后移。

int j=L.n
while(j>=1&&x<a[j]){
    a[j+1]=a[j];
    j--;
}
L.a[j+1]=x

3.顺序表的删除

问题:删除表中第i个元素

方法:元素i+1后的元素前移

void sq-del(sqlist&L.int i,ElemType x){
    //删除线性表的第I个元素
    for(int j=i+1;j<=L.n;j++){
        a[j-1]=a[j];
        L.n--;}}

问题2:删除第i个元素开始的k个元素

void del(sqlist&L,int i,int k){
    if(k>0 && i>0 && (i+k)=L.n){
        for(int j=i+k;j<L.n;++j){
            L.a[j-k]=L.a[j];
            L.n--;}
    }
}

有问题多谢指正。

发布了18 篇原创文章 · 获赞 11 · 访问量 3029

猜你喜欢

转载自blog.csdn.net/qq_41536104/article/details/101084487