本文采用c语言,但for循环中仍然采用了int定义
目录
3.按值查找操作,在表中查找具有给定关键词的元素,如果有多个返回第一个即可
顺序表的结构体定义为
typedef struct{
elemtype data[maxsize];
int length;
}sqlist;
1.初始化一个表,构造一个空的线性表
bool initlist(sqlist *a){
a->length=0;
return 1;
}
2.求表长。返回线性表a的长度,即a的数据元素的个数
int length(sqlist a){
return a.length;
}
3.按值查找操作,在表中查找具有给定关键词的元素,如果有多个返回第一个即可
//按值查找操作,在表中查找具有给定关键字的元素,返回位置 ,否则返回为-1,
int locatelem(sqlist a,int e){
if(a.length==0)return -1;//空表返回-1;
for(int i=0;i<a.length;++i){
if(a.data[i]==e)return i+1;//找到了返回我们需要的位置i+1;
}
return -1;
//没有找到返回0
}
4.按位查找操作,在表中查找第i个元素的值
int getelem(sqlist a,int i){
if(a.length==0||i<1||i>a.length)return -1;//位置不合法
return a.data[i-1];
}
5.插入操作,在表中第i个位置插入元素e
bool listinsert(sqlist *a,int i,elemtype e){
if(a->length>=maxsize){
printf("表满");
return -1;
}
if(i<1&&i>a->length+1)return -1;//位置不合法
//然后我们要从第n个到第i个位置全部后移动
for(int k=a->length;k>=i;--k){
a->data[k]=a->data[k-1];
}
a->length++;
a->data[i-1]=e;
return 1;//表示成功
}
6.删除操作,删除表中第i个元素,用e返回删除元素之值
//在顺序表中,删除第i个元素 ,用e返回我们删除的元素
bool listdel(sqlist *a,int i,elemtype *e){
if(i>a->length||i<1)return -1;
*e= a->data[i-1];
for(int k=i-1;k<a->length-1;++k){
a->data[k]=a->data[k+1];
}
a->length=a->length-1;
return 1;
}
7.输出操作
//打印顺序表中所有元素
void listprint(sqlist a){
if(a.length==0){
printf("表空:\n");
return ;
}
for(int i=0;i<a.length;++i){
printf("%d ",a.data[i]);
}
return ;
}
8.判空操作
//判断表是不是空表,如果是空表返回1,如果不是空表,返回0;
bool empty(sqlist a){
if(a.length==0){
return 1;
}
return 0;
}
实例全部
#include<stdio.h>
#define elemtype int
#define maxsize 100
//顺序表的操作
typedef struct{
elemtype data[maxsize];
int length;
}sqlist;
//初始化一个顺序表 ,成功return 1 22
bool initlist(sqlist *a){
a->length=0;
return 1;
}
//求表长 return表长 22
int length(sqlist a){
return a.length;
}
//按值查找操作,在表中查找具有给定关键字的元素,返回位置 ,若返回为-1,
int locatelem(sqlist a,int e){
if(a.length==0)return -1;//空表返回-1;
for(int i=0;i<a.length;++i){
if(a.data[i]==e)return i+1;//找到了返回我们需要的位置i+1;
}
return -1;
//没有找到返回0
}
//按位查找操作,获取表中第i个元素的值
int getelem(sqlist a,int i){
if(a.length==0||i<1||i>a.length)return -1;//位置不合法
return a.data[i-1];
}
//在顺序表中第i个位置插入元素e 22
bool listinsert(sqlist *a,int i,elemtype e){
if(a->length>=maxsize){
printf("表满");
return -1;
}
if(i<1&&i>a->length+1)return -1;//位置不合法
//然后我们要从第n个到第i个位置全部后移动
for(int k=a->length;k>=i;--k){
a->data[k]=a->data[k-1];
}
a->length++;
a->data[i-1]=e;
return 1;//表示成功
}
//在顺序表中,删除第i个元素 ,用e返回我们删除的元素
bool listdel(sqlist *a,int i,int *e){
if(i>a->length||i<1)return -1;
*e= a->data[i-1];
for(int k=i-1;k<a->length-1;++k){
a->data[k]=a->data[k+1];
}
a->length=a->length-1;
return 1;
}
//打印顺序表中所有元素
void listprint(sqlist a){
if(a.length==0){
printf("表空:\n");
return ;
}
for(int i=0;i<a.length;++i){
printf("%d ",a.data[i]);
}
return ;
}
//判断表是不是空表,如果是空表返回1,如果不是空表,返回0;
bool empty(sqlist a){
if(a.length==0){
return 1;
}
return 0;
}
int main(){
sqlist la;
initlist(&la);
for(int i=1;i<71;++i){
listinsert(&la,i,i);
}
printf("打印一下顺序表:\n") ;
listprint(la);
printf("\n在位置为5的地方插入5,然后打印顺序表:\n");
listinsert(&la,5,5);
listprint(la);
printf("\n顺序表长度为:%d\n",length(la));
printf("元素3的位置在顺序表的位置为:%d\n",locatelem(la,3));
printf("顺序表中第七十一个元素为:%d\n",getelem(la,71));
int e;
listdel(&la,5,&e);
printf("删除第五个元素后,打印顺序表:\n");
listprint(la);
printf("\n删掉的第五个元素为%d",e);
}