栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构之线性表(顺序表)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构之线性表(顺序表)

目录

一、概念

1、线性表的定义

2、线性表的存储结构

3、顺序表的优缺点

二、顺序表的结构体定义和基本操作

1、顺序表的结构体定义

2、创建顺序表

3、查找数据元素

4、插入数据元素

5、删除数据元素

三、总结

四、源代码 


一、概念

1、线性表的定义

线性表是具有相同特性数据元素的一个有限序列。

线性表的长度:该序列中所含元素的个数(n>=0);

n=0,表示线性表是一个空表。

2、线性表的存储结构

线性表的存储结构有顺序存储结构和链式存储结构两种。

3、顺序表的优缺点

优点:存储密度大;可以随机存取表中任一元素。

缺点:在插入、删除某一元素时,需要移动大量元素;浪费存储空间;属于静态存储形式,数据元素的个数不能自由扩充。

二、顺序表的结构体定义和基本操作

1、顺序表的结构体定义
  • 头文件以及宏定义
    #include
    #include 
    #define maxsize 100
  • 顺序表的结构体定义
    typedef struct{
    	int data[maxsize];  //存放顺序表元素的数组
    	int length;        //存放顺序表的长度
    }SqList;

typedef:可以理解为给这个结构体取了个别名(SqList),在后续的程序中就直接可以用SqList来定义结构体变量。 

2、创建顺序表

由数组元素num[0,...n-1 ]创建顺序表L。其方法是将数组num中的每个元素依次放入到顺序表中。

  •   主函数
    #include
    #include 
    #define maxsize 100
    typedef struct{
    	int data[maxsize];
    	int length;
    }SqList;
    
    void createList(SqList &L,int a[],int n);   //创建顺序表
    void printList(SqList L);    //输出顺序表
    
    
    
    //方法二   直接用数组a中的元素来创建顺序表
    int main(){
    	SqList L;
    	int a[10]={1,2,3,4,5,6,7,8}; //定义一个数组存放数据元素
    
    	createList(L,a,6);   //创建一个顺序表 
    	
    	return 0;
    } 
  • 创建顺序表
    //创建顺序表
    void createList(SqList &L,int a[],int n){
    	int i=0,k=0;           //k表示L中元素的个数,初始值位0; 
    	while(k  
  • 输出顺序表
    //输出顺序表
    void printList(SqList L){
    	int i;
    	for(i=0;i  

结果:

3、查找数据元素
  • 查找i位置上数据元素的值
    //找在i位置上是数据元素的值 (注意数组下标和物理位置的区别)
    int GetElement(SqList L,int i){
    	int e;    //定义一个变量保存查找到的元素
    	if(i<1||i>L.length)
    		return 0;   
    	e=L.data[i-1];
    	return e; 
    } 
  •  按元素值查找,返回其下标 
    //按元素值查找,返回其下标 
    int  LocatElem(SqList L,int e){
    	int i=0;
    	while(L.data[i]!=e){
    		i++;
    	}
    	if(i>=L.length){    //没有找到返回-1 
    		return -1;
    	}
    	return i;          //找到了返回其下标 
    } 

4、插入数据元素
//插入数据元素
int insertList(SqList &L,int k,int e){
	int i;
	if(k<0||k>L.length-1||L.length==maxsize){   //位置错误或已经到达表长
		return 0;                            //此时插入不成功,返回0
	}
	for(i=L.length-1;i>=k;i--){
		L.data[i+1]=L.data[i];          //从后往前,逐个将元素后移一个位置
	}
	L.data[k]=e;               //将e放在k位置上
	L.length++;                //表长增1
	return 1;
} 

5、删除数据元素
//删除某个数据元素
int deleteList(SqList &L,int k) {
	int i;
	if(k<0||k>L.length-1)     //位置不对,返回0,表示删除不成功
		return 0;
	for(i=k;i 

三、总结
  • 重点掌握顺序表的查找、插入和删除;

四、源代码 
#include
#include 
#define maxsize 100
typedef struct{
	int data[maxsize];
	int length;
}SqList;


void createList(SqList &L,int a[],int n);   //创建顺序表

void initList(SqList &L);    //初始化线性表

void printList(SqList L);    //输出顺序表
 
bool ListEmpty(SqList L);   //判断顺序表是否为空

int Listlength(SqList L);   //求顺序表的长度 

int GetElement(SqList L,int i); //找在i位置上是数据元素的值 

int  LocatElem(SqList L,int e); //按元素值查找,返回其下标 

int insertList(SqList &L,int k,int e);  //插入数据元素

int deleteList(SqList &L,int k);  //删除某个数据元素


int main(){
	SqList L;
	int n;
//	scanf("%d",&n);
//	int num[n];
//	for(int i=0;iL.length)
		return 0;
	e=L.data[i-1];
	return e; 
} 

//按元素值查找,返回其下标 
int  LocatElem(SqList L,int e){
	int i=0;
	while(L.data[i]!=e){
		i++;
	}
	if(i>=L.length){    //没有找到返回-1 
		return -1;
	}
	return i;          //找到了返回其下标 
} 

//插入数据元素
int insertList(SqList &L,int k,int e){
	int i;
	if(k<0||k>L.length-1||L.length==maxsize){
		return 0;
	}
	for(i=L.length-1;i>=k;i--){
		L.data[i+1]=L.data[i];
	}
	L.data[k]=e;
	L.length++;
	return 1;
} 

//删除某个数据元素
int deleteList(SqList &L,int k) {
	int i;
	if(k<0||k>L.length-1)
		return 0;
	for(i=k;i 

此代码的结果图:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/628953.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号