目录
一、前言
从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;
}