线性表是逻辑结构,独立于存储结构
线性表是逻辑结构,它表示元素有一对一的相邻关系
顺序表和链表是存储结构
线性表的顺序存储
头文件
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define MaxSize 10
顺序表的定义
//顺序表定义
typedef struct {
int data[MaxSize];//存放顺序表元素的数组
int length;//顺序表的长度
// int size;//顺序表的大小,感觉没必要
初始化顺序表[initSqlist()]
//初始化顺序表
void initSqlist(Sqlist &sqlist){
sqlist.length=0;
printf("初始化完成,初始单链表长度为%d\n",sqlist.length);
}
求表长[Length()]
//求表长
void Length(Sqlist l){
printf("表长为%d\n",l.length);
元素插入[ListInsert()]
bool ListInsert(Sqlist &sq,int l,int e){
if(l<1||l>sq.length+1){
printf("插入位置不合法");
return false;
}
if(sq.length>=MaxSize){
printf("存储空间不足");
return false;
}
for (int i=sq.length;i>=l;i--){
sq.data[i]=sq.data[i-1];
}
sq.data[l-1]=e;
sq.length++;
printf("插入成功,插入数据为%d\n",e);
return true;
}
元素删除[ListDelete()]
//删除操作
bool ListDelete(Sqlist &sq,int i,int &e){
//先判断删除是否合法
if(i<1||i>sq.length+1){
printf("删除位置不合法");
return false;
}
e=sq.data[i-1];
for(int j=i-1;j<=sq.length;j++){
sq.data[j-1]=sq.data[j];
}
sq.length--;
printf("删除成功,删除元素为%d\n",e);
return true;
}
元素查找[LocateElem()&&GetElem()]
//按值查找
void LocateElem(Sqlist sq,int e){
int flag=-1;
for(int j=0;j<sq.length;j++){
if(sq.data[j]==e){
flag=j;
break;
}
}
if(flag!=-1){
printf("查找成功,在data[%d]上\n",flag);
}else{
printf("查找失败");
}
}
//按位操作
void GetElem(Sqlist sq,int i){
if(i<1||i>sq.length+1){
printf("查找位置不合法");
}else{
printf("data[%d]上的数值为%d",i,sq.data[i-1]);
}
}
打印顺序表[PrintList()]
//输出操作
void PrintList(Sqlist sq){
for(int i=0;i<sq.length;i++){
printf("data[%d]=%d ",i,sq.data[i]);
}
}
主函数
int main(){
Sqlist list1;
initSqlist(list1);//初始化
ListInsert(list1,1,1); //插入操作
ListInsert(list1,2,2); //插入操作
ListInsert(list1,3,3); //插入操作
ListInsert(list1,4,4); //插入操作
ListInsert(list1,5,5); //插入操作
PrintList(list1); //输出表
Length(list1);//求表长
int e=0;
ListDelete(list1,2,e);
PrintList(list1); //输出表
Length(list1);//求表长
LocateElem(list1,2);//按值查找
GetElem(list1,3);//按位置查找
}
输出结果