数据结构(第一期:顺序表的基本操作)

目录

一、前言

二、线性表的基本概念与基本操作

三、顺序表的基本操作以及代码实现


一、前言

从8月29日,将要开始数据结构的学习了,数据结构是基于c语言基础的一门课,各位如果c语言基础不是特别好,可以去我的主页看一下我的c语言专栏,接下来我们一起来学习数据结构的基本知识。

二、线性表的基本概念与基本操作

1.线性表的定义

线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,其中n为表长,当n=0时,线性表是一个空表,若用L命名线性表,则其一般表示为

L=(a1,a2,...,ai,ai+1,...,an)

式中,a1是唯一的"第一个"数据元素”,又称"表头元素",an是唯一的"最后一个"数据元素",又称表尾元素。

除第一个元素外,每个元素有且仅有一个直接前驱,除最后一个元素外,每个元素有且仅有一个直接后继。

2.线性表的特点

(1)表中元素的个数有限

(2)表中元素具有逻辑性的顺序性,表中元素有其先后次序。

(3)表中元素都是数据元素,每个元素都是单个元素。

(4)表中元素数据类型都相同,这意味着每个元素占有相同大小的存储空间

(5)表中元素具有抽象型,即仅讨论元素间的逻辑关系,而不考虑元素究竟表示什么内容

3.线性表的基本操作

线性表基本操作包括基本的增删改查

InitList(&L):初始化表,构造一个空表

Length(L):求表长,返回线性表L的长度,即L中数据元素的个数

LocateElem(L,e):按值查找操作,在表L中查找具有给定关键字值的元素

GetElem(L,i):按位查找操作,获取表L中第i个位置的元素的值

ListInsert(&L,i,e):插入操作,在表L中第i个位置上插入指定元素e

ListDelete(&L,i,&e):删除操作,在表L中第i个位置的元素,并用e返回删除元素的值

PrintList(L):输出操作,按前后顺序输出线性表L的所有元素的值。

Empty(L):判空操作,若L为空表,则返回true,否则返回false

DestoryList(L):销毁操作。销毁线性表,并释放线性表L所占用的内存空间。

三、顺序表的基本操作以及代码实现

1.顺序表的定义

线性表的顺序存储又称顺序表,他是用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻,第1个元素存储在线性表的起始位置,第i个元素的存储位置后面紧接着存储的是第i+1个元素,称i为元素ai在线性表中的位序,因此,顺序表的特点是表中元素的逻辑顺序与其物理顺序相同。 

2.顺序表的基本操作

(1)顺序表的定义(静态数组表示):静态数组有固定的大小,下期会介绍动态数组的具体内容

#include<stdio.h>
#define MaxSize 20//预定义MaxSize 有20个位置,但是定义以后不能更改数组长度
typedef int ElemType;//这样操作的目的是后期方便数据类型
//顺序表结构体
typedef struct{
    int length;//顺序表长度
    ElemType data[MaxSize];//数据的数量
}SqList;

(2)顺序表的插入操作:

bool InsertList(SqList &L,int i,ElemType &e){
    if(i<1||i>L.length+1){//进行逻辑判断,根据现实意义来说,i不能小于1,i也不能大于length+1
        return false;
    }
    if(L.length>=MaxSize){//进行逻辑判断,长度不能大于等于最大数组长度,否则会无法插入操作
        return false;
    }
    for(int j=L.length;j>=i;j--){
        L.data[j]=L.data[j-1];
    }
    L.data[i-1]=e;
    length++;
    return true;
}

(3)删除操作

bool DeleteList(SqList &L,int i,ElemType x){
    if(i<1||i>L.length+1){//进行逻辑判断,根据现实意义来说,i不能小于1,i也不能大于length+1
        return false;
    }
    e=L。data[i-1];
    for(int j=i;j<L.length+1;j++){
        L.data[j-1]=L.data[j];
    }
    length--;
    return true;
}

(4)按值查找

int LocateElem(SqList L,ElemType x ){
    for(int i=0;i<L.length;i++){
        if(L.data[i-1]==e){
            return i+1;
        }
        printf("\n");
    }
}

(5)打印操作

int LocateElem(SqList L,ElemType x ){
    for(int i=0;i<L.length;i++){
        if(e==L.data[i-1]){
            return i+1;
        }
        printf("\n");
    }
}

全部代码

#include<stdio.h>
#define MaxSize 20
typedef int ElemType;
typedef struct{
	int length;
	ElemType data[MaxSize];
}Sqlist;
bool InsertList(Sqlist &L,int i,ElemType e){
	if(i<1||i>=L.length+1){
		return false;
	}
	if(L.length>=MaxSize){
		return false;
	}
	for(int j=L.length;j>=i;j--){
		L.data[j]=L.data[j-1];
	}
	L.data[i-1]=e;
	L.length++;
	return true;
} 
bool DeleteList(Sqlist &L,int i,ElemType &e ){
	if(i<1||i>=L.length+1){
		return false;
	}
		e=L.data[i-1]; 
	for(int j=i;i>L.length;j++){
		L.data[i-1]=L.data[i];
		L.length++;
		return true;
	}
	return 0;
}
int Locateelem(Sqlist L,ElemType e){
	for(int i=0;i>L.length;i++){
		if(e==L.data[1]){
			return i+1;
		}
	}
	
}
void PrintList(Sqlist L){
	for(int i=0;i<L.length;i++){
		printf("%3d\n",L.data[i]);
	}
	printf("\n");
}
int main(){
	Sqlist L;
	bool ret;
	ElemType del;
	int pos;
	L.data[0]=1;
	L.data[1]=2;
	L.data[2]=3; 
	L.length =3;
	ret=InsertList(L,2,60);
	if(ret){
		printf("insert success!\n");
		PrintList(L);
	}else{
		printf("insert falied!\n");
	}
	ret =DeleteList(L,2,del);
	if(ret){
		printf("delete success!\n");
		PrintList(L);
	}else{
		printf("delete failed!\n");
	}
	pos=Locateelem(L,60);
	if(pos){
		printf("find this element!\n");
		printf("this element=%d\n",pos);
	}else{
		printf("don't find this element!\n");
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文艺小青年111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值