数据结构考研一练习day1-c语言顺序表

本文采用c语言,但for循环中仍然采用了int定义

目录

顺序表的结构体定义为

1.初始化一个表,构造一个空的线性表

2.求表长。返回线性表a的长度,即a的数据元素的个数

3.按值查找操作,在表中查找具有给定关键词的元素,如果有多个返回第一个即可

4.按位查找操作,在表中查找第i个元素的值

5.插入操作,在表中第i个位置插入元素e

6.删除操作,删除表中第i个元素,用e返回删除元素之值

7.输出操作

8.判空操作

实例全部


顺序表的结构体定义为

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); 
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值