顺序表的定义:
线性表的顺序存储又称顺序表,顺序表有随机存储的优点,但对于插入删除操作需要移动大量的元素。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define MaxSize 10
//顺序表定义
typedef struct {
int data[MaxSize];//存放顺序表元素的数组
int length;//顺序表的长度
// int size;//顺序表的大小,感觉没必要
}Sqlist;
//初始化顺序表
void initSqlist(Sqlist &sqlist){
sqlist.length=0;
printf("初始化完成,初始单链表长度为%d\n",sqlist.length);
}
//求表长
void Length(Sqlist l){
printf("表长为%d\n",l.length);
}
//按值查找
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]);
}
}
//插入操作
//实现将元素e插入到顺序表L的第i个位置
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;
}
//删除操作
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;
}
//输出操作
void PrintList(Sqlist sq){
for(int i=0;i<sq.length;i++){
printf("data[%d]=%d ",i,sq.data[i]);
}
}
//判空操作
bool Empty(Sqlist sq){
if(sq.length==0){
printf("链表为空");
}else{
printf("链表不空");
}
}
//销毁操作
void DestoryList(Sqlist &sq){
}
int main(){
Sqlist list1;
initSqlist(list1);//初始化
Empty(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);//按位置查找
}
笑看风声 发布了66 篇原创文章 · 获赞 29 · 访问量 1万+ 私信 关注