顺序线性表的初始化,插入,删除,查找以及合并操作(伪代码) 您所在的位置:网站首页 初始化顺序表是什么意思 顺序线性表的初始化,插入,删除,查找以及合并操作(伪代码)

顺序线性表的初始化,插入,删除,查找以及合并操作(伪代码)

2024-02-14 13:49| 来源: 网络整理| 查看: 265

顺序线性表的相关操作

1.线性表的初始化操作(即构造空线性表):initlist_sq(sqlist &l)

     就是为顺序表分配一个预定义大小的数组空间,并将线性表长度设为0;其中定义的listsize为当前分配的存储容量,随着元素的增加其存储容量也要增加。因此为其增加了一个存储 LISTINCREMENT个数据元素的空间 。

2. 线性表的插入操作 :在顺序线性表l的第i个位置前插入元素e  。listinsert(sqlist &l,int i ,elmetype e)

    第一步判断插入位置是否合法,如果不合法则异常退出。第二步判断线性表存储空间是否不足,如果不足则增加存储容量。第三步将插入位置及之后元素后移。第四步将待插入元素插入。

 3.线性表的删除操作。从顺序线性表l中删除第i个元素,并用e返回其值  。 listdelete(sqlist &l,int i,elmetype *e )

    第一步判断删除位置是否合法,如果不合法则异常退出。第二步将待删除位置元素的值赋于e。第三步将被删除之后的元素左移 。

 

4.线性表的查找操作。线性表l查找第一个与元素e满足compare()元素的位置。若在,返回其在l中的次序。若不存在则返回0 。

int locateelem_sq(sqlist *l,elemtype e,status (*compare)(elemtype, elemtype))

    第一步设i=1,从线性表第一个位置开始查找。第二步进入循环,判断当前位置的值是否与e相等,并且是否循环到列表最后一个元素。如果未循环到尾部并且值还不相等,则继续循环,寻找符合条件元素的位置。第三步判断,如果当前位置不在线性表尾部,则说明已找到符合的i值。若在性表尾部,则说明循环到最后一个元素也为找到符合元素。返回0;

5.线性表的合并操作。已知la,lb中元素按非递减排列,归并la和lb的元素放入lc中,其也按非递减排列。

void mergelist_sq(sqlist la,sqlist lb,sqlist *lc)

第一步为lc分配空间。第二步进入while循环,如果两个都未循环到表尾,则比较相应位置元素,把较小的元素放入lc中,并且将lc和较小元素的线性表当前位置向后移动一个。直到一个线性表循环完成后,退出此循环。第三步将剩余那个列表中的剩余元素插入lc中。

//线性表的动态分配顺序存储结构 #define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量 #define LISTINCREMENT 10 //线性表存储空间的分配增量 typedef struct { elemtype *elem; //存储空间基址 int length; //当前长度 int listsize; //当前分配的存储容量 } sqlist; //构造空线性表l status initlist_sq(sqlist &l) { l.elem=(elemtype *)malloc(LIST_INIT_SIZE*sizeof(elemtype)); if(!l.elem) exit(1); //分配失败 ,1为异常退出 l.length=0; l.listsize= LIST_INIT_SIZE; return 0; } //线性表的初始化操作就是为顺序表分配一个预定义大小的数组空间,并将线性表长度设为0; //listsize为当前分配的存储容量,随着元素的增加其存储容量也要增加。因此为其增加了一个存储 LISTINCREMENT个数据元素的空间 //插入操作。在顺序线性表l的第i个位置前插入元素e status listinsert(sqlist &l,int i ,elmetype e) { if(il.length+1) return 0; //i值不合法 if(l.length>=l.listsize)//当前存储位置已满,增加分配 { newbase=(elmetype *)realloc(l.elem,(listsize+LISTINCREMENT)*sizeof(elemtype)); if(!newbase) //存储分配失败 exit(1); l.listsize+= LISTINCREMENT;//增加存储容量 } int *q,*p; q=&(l.elem[i-1]); //q为插入地址 for(p=&(l.elem[l.listsize-1]);p>=q;p--)//插入位置及之后的元素后移一个位置 *(p+1)=*p; *q=e; //插入e l.length++;//表长增加1 return 0; } //删除操作。从顺序线性表l中删除第i个元素,并用e返回其值 status listdelete(sqlist &l,int i,elmetype *e ) { if(il.length+1) return 0; //i值不合法 int *q,*p; p=&(l.elem[i-1]); //q为删除元素地址 e=*p; q=l.elem+l.length-1; //表尾元素位置 for(p++;p e2) return 0; else return -1; } int i,*p; i=1; p=l.elem;//p为第一个元素的存储位置 while(i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有