顺序表的查找、插入、删除、合并操作及其优缺点

顺序表的查找、插入、删除、合并操作,用c++实现相关代码:

#include<iostream>

using namespace std;

//定义线性表顺序存储结构

#define MAXSIZE 100  //线性表最大长度

typedef struct

{

//线性表占用数组空间

int elem[MAXSIZE];

//记录线性表中最后一个元素在数组elem[]中的位置(下标值),空表置为-1

int last;

}SeqList;

//顺序表的按内容查找运算

//在顺序表L中查找与e相等的元素,若L.elem[i]=e,则找到该元素,并返回i+1,若找不到,则返回-1

int  Locate(SeqList L, int e)

{

//i为扫描计数器,初值为0,即从第一个元素开始比较

int i = 0;

//顺序扫描表,直到找到值为e的元素或扫描到表尾而没有找到

while ((i<=L.last)&&(L.elem[i]!=e))

{

i++;

}

if (i <= L.last)

{

return (i + 1);//若找到值为e的元素,则返回其序号

}

else

{

return -1;//若没找到,则返回空序号

}

}

//顺序表的插入运算

#define OK 1

#define ERROR 0

//在顺序表L中第i个数据元素之前插入一个元素e,n个元素有n+1个插入位置,1<=i<=L->last + 2

int InsList(SeqList *L, int i, int e)

{

int k = 0;

if ((i<1) || (i>L->last + 2))//判断插入位置是否合法

{

cout << "插入位置i值不合法!" << endl;

return (ERROR);

}

if (L->last >= MAXSIZE - 1)

{

cout << "表已满,无法插入!" << endl;

return (ERROR);

}

for (k = L->last; k >= i - 1; k--)//为插入元素而移动位置

{

L->elem[k + 1] = L->elem[k];

}

L->elem[i - 1] = e;

L->last++;

return (OK);

}

//顺序表的删除运算

//在顺序表L中删除第i个数据元素,并用指针参数e返回其值,1<=i<=L->last + 1

int DelList(SeqList *L, int i, int *e)

{

int k = 0;

if ((i<1) || (i>L->last + 1))//判断删除位置是否合法

{

cout << "删除位置不合法!" << endl;

return (ERROR);

}

*e = L->elem[i - 1];//将删除的元素存放到e所指向的变量中

for (k = i; k <= L->last; k++)//将后面的元素依次前移

{

L->elem[k - 1] = L->elem[k];

}

L->last--;

return (OK);

}

int main()

{

//

system("pause");

return 0;

}

例:有两个顺序表LA,LB,其元素均为非递减有序排列,编写算法将它们合并成一个顺序表LC,要求LC也是非递减有序排列。

解:算法如下:

//线性表的合并运算

void MergeList(SeqList *LA, SeqList *LB, SeqList *LC)

{

int i = 0, j = 0, k = 0;

while ((i <= LA->last) && (j <= LB->last))

{

if (LA->elem[i] <= LB->elem[j])

{

LC->elem[k] = LA->elem[i];

i++;

k++;

}

else

{

LC->elem[k] = LB->elem[j];

j++;

k++;

}

}

while (i <= LA->last)//当表LA有剩余元素时,则将表LA的剩余元素赋给表LC

{

LC->elem[k] = LA->elem[i];

i++;

k++;

}

while (j <= LB->last)//当表LB有剩余元素时,则将表LB的剩余元素赋给表LC

{

LC->elem[k] = LB->elem[j];

j++;

k++;

}

LC->last = LA->last + LB->last + 1;

}

顺序表的优点:1.无须为表示结点间的逻辑关系而增加额外的存储空间;

2.可方便随机存取表中任一元素。

缺点:1.插入或删除运算不方便;

2.由于顺序表要占用连续的存储空间,存储分配只能预先进行静态分配,当表长变化较大时,难以确定合适的存储规模。

时间: 2024-10-10 04:07:00

顺序表的查找、插入、删除、合并操作及其优缺点的相关文章

java实现数据结构-线性表-顺序表,实现插入,查找,删除,合并功能

package 顺序表; import java.util.ArrayList; import java.util.Scanner; public class OrderList { /** * @param args * @author 刘雁冰 * @2015-1-31 21:00 */ /* * (以下所谓"位置"不是从0开始的数组下标表示法,而是从1开始的表示法.) * (如12,13,14,15,16数据中,位置2上的数据即是13) * * 利用JAVA实现数据结构-线性表-顺

_DataStructure_C_Impl:在顺序表中查找元素

// _DataStructure_C_Impl:Search #include<stdio.h> #include<stdlib.h> #define MaxSize 100 #define IndexSize 20 typedef int KeyType; //元素的定义 typedef struct{ KeyType key; }DataType; //顺序表的类型定义 typedef struct{ DataType list[MaxSize]; int length; }

查找[1]顺序表的查找

简单顺序查找,有序表的二分查找,索引顺序表的查找 1 #include "iostream" 2 #include "iomanip" 3 #include "time.h" 4 #include "stdlib.h" 5 using namespace std; 6 7 #define Max 20 8 9 /* 10 *简单顺序查找 11 */ 12 int Seq_Search(int A[],int n,int x)

顺序表的查找

1.对长度为4的顺序表进行查找,若第一个元素的概率为1/8,第二个元素的概率为1/4,第三个元素的概率为3/8,第四个元素的概率为1/4,则查找任一个元素的平均查找长度为( ) A)11/8           B)7/4                         C)9/4       D)11/4 [答案]C [解析]对顺序表查找,ASL= ,代入题目得:ASL=4*(1/8)+3*(1/4)+2*(3/8)+1*(1/4)=9/4 注意:是从表尾开始查找 顺序查找 折半查找 分块查找

顺序表的非递减数列合并

#include<stdio.h> /*包含输入输出头文件*/ #define ListSize 100 typedef int DataType; typedef struct { DataType list[ListSize]; int length; }SeqList; void InitList(SeqList *L) /*将线性表初始化为空的线性表只需要把线性表的长度length置为0*/ { L->length=0; /*把线性表的长度置为0*/ } int ListEmpt

查找-顺序表的查找

相关术语: 查找表:(Search Table)是由同一类型的数据元素(或记录)构成的集合. 关键字:(Key)是数据元素中某个数据项的值,又称为键值,它可以标识一个数据元素. 主关键字:若某个关键字可以唯一地标识一个记录,则称此关键字为主关键字(Primary Key).这就意味着,对于不同的记录,其主关键字均不相同.主关键字所在的数据项 成为主关键码. 次关键字:对于那些可以识别多个数据元素(或记录)的关键字,我们称之为次关键字(Second Key). 查找:就是根据给定的某个值,在查找表

顺序表 | 二分查找:两个数组合并后的中位数

输入两个长度相同的升序数组,返回这两个数组合并后的中位数 C++代码: int bisearch_midNum(int a[],int b[],int n){ int s1=0,s2=0,d1=n-1,d2=n-1,m1,m2; while(s1!=d1 || s2!=d2){//只要a,b序列同时出现了s==d的情况,才能False退出 m1=(s1+d1)/2; m2=(s2+d2)/2; system("pause"); if(a[m1]==b[m2]) return a[m1]

SQL向一个表中批量插入&amp;&amp;删除大量数据

插入: 1. 数据从另一个表中获取 (1)两表结构不一样insert into tb1 需要的列名 select 按照前面写上需要的列名 from tb2(2)两表结构一样insert into tb1 * select * from tb2 2. 数据直接输入 (1) INSERT INTO MyTable(ID,NAME) VALUES(1,'123');INSERT INTO MyTable(ID,NAME) VALUES(2,'456');INSERT INTO MyTable(ID,N

oracle创建、删除 数据库、建立表空间以及插入 删除 修改表

一.创建.删除数据库 oracle OraDb11g_home->配置和移植工具->Database configration  Assistant->...然后可以创建或者删除数据库 二.建立表空间 create tablespace inspur_tablespace   logging datafile 'D:\MyOracleBACK SQL\StudentDB\inspur_tablespace.dbf'  size 50m autoextend on next 50m max