栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构——顺序表概念和操作

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构——顺序表概念和操作

记录一下(插入,删除,查找)

注意点:位序 i 的值是从1开始的,而数据n是从 0 开始计数的。

时间复杂度:

插入:最好情况:表尾插入:O(1)

           最坏情况:表头插入:O(n)

           平均情况:执行n/2次,O(n)

删除:最好情况:表尾删除:O(1)

           最坏情况:表头删除:O(n)

           平均情况:执行(n-1)/2次,O(n)

按值查找:最好情况:表头查找:O(1)

                  最坏情况:表尾查找:O(n)

                  平均情况:执行(n+1)/2次,O(n)

           


#include
#include
#define Maxsize 50


typedef struct{
	int data[Maxsize];  //顺序表中的元素 
	int length;   // 顺序表长度 
}SqList;

 
//在顺序表的第i个位置插入新元素e ,i后元素后移操作 

bool List_insert(SqList &L,int i,int e)
{	
//	if (i<1 || i>L.length+1){
//	printf("插入失败,插入位置不合法n");
//	return false;
//	}
//	
//	if (L.length >= Maxsize){
//	printf("插入失败,顺序表已满n");
//	return false;
//	}
//	@@@@@@@@将判定条件前移放入main函数里面了 

	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 List_delete(SqList &L,int i,int &e){//直接赋值将第i个数赋值给e 
	e = L.data[i-1];//注意下标位置是从1开始的
	for (int j = i;j < L.length; j++ ){
		L.data[i-1] = L.data[i];//i后元素前移一位 
	}
	L.length--;
	return true; 
}



int List_find(SqList &L,int e){
	int i;
	for (i = 0;i <= L.length;i++){
		if(L.data[i]==e){
			return i+1;
		}			
	}
	return 0;
}



int List_search(SqList &L,int i){
	
		return L.data[i-1];
		
}



bool Sqlist_display(SqList L){
	int j;	
	for (j=0;j<=L.length-1;j++)
		printf("%4d",L.data[j]);
	printf("n");
}



int main(){
	SqList L;
	int i,x,j;
	printf("n请输入顺序表长度:");
	scanf("%d",&L.length);
	
	printf("请输入顺序表元素:n");
	for (j=0;j<=L.length-1;j++){
		scanf("%d",&L.data[j]);
	}
	
	printf("*******************************n");
	printf("请输入您要进行的操作:n");
	printf("1.插入元素n");
	printf("2.删除元素        3.按值查找元素n");
	printf("4.按位查找元素n");
	printf("*******************************n");
	printf("实现操作:");
	scanf("%d",&i);

	switch (i)
	{
		
	case 1:
		printf("请输入插入操作位置:");
		scanf("%d",&i);
	
		if (i<1 || i>L.length+1){
			
			printf("插入失败,插入位置不合法n");
			return false;		
		}
	
		if (L.length >= Maxsize){
		printf("插入失败,顺序表已满n");
		return false;
		} //直接将插入条件判定移到输入插入位置之后 
	
		printf("请输入需要插入的新元素:");
		scanf("%d",&x);
		List_insert(L,i,x);
		Sqlist_display(L);
		break;

	case 2:		
		printf("请输入删除操作位置:");
		scanf("%d",&i);
		if (i<1 || i>L.length){			
			printf("失败,位置不合法n");
			return false;		
		}	
		if (L.length >= Maxsize){
			printf("失败,顺序表已满n");
			return false;
		} 
		List_delete(L,i,x);
		Sqlist_display(L);
		break;
		
	case 3:
		printf("请输入要查找的元素:");
		scanf("%d",&x);
		if(List_find(L,x)){
			printf("find success!!查找元素在第%d位n",List_find(L,x));
		}
		else{
			printf("find false!!n");
		}
		break;
		
	case 4:
		printf("输入查找位序:");
		scanf("%d",&i) ;
		if(i>0&&i<=L.length){
			printf("find success!!查找元素是%dn",List_search(L,i));
		}
		else{
			printf("find false!!,the location you input exceeds the range!n");
		}
		break;
	
	default:
		printf("没有这一步操作n");
		break;
	}
	
//	system("pause");
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/998051.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号