数据结构--------线性表的相关操作

这是第一次在论坛上码文章,可能会有许多错误,希望那个大家多多包涵。大二刚开始接触学习数据结构,回顾了一下之前线性结构中线性表的基本操作
在这里插入图片描述

1、抽象类型的定义:

typedef struct
{
	dataType data[maxsize];/*定义线性表是数组*/
	int length;//代表当前顺序表的长度
}seqList;

2、线性表的初始化

int  initSeqList(seqList *L){
    //将顺序表length值赋值为-1,即将顺序表置为空表
    L->length = -1;
	return 0;
}

3、判断线性表的是否为空表

int isEmpty(seqList L){
   if(L.length == -1)
	   return 1;//表为空时,返回1表示确认
  return 0;//表为非空时 返回0

}

4、判断线性表的是否已满

int isFull(seqList L){
    if(L.length == maxsize-1)
		return 1;
	return 0 ;
}

5、批量向线性表中填充数据

int add(seqList *L){
	int i;
	int j;
	printf("请输入顺序表的长度: ");
	scanf("%d",&i);
	printf("请输入元素\n");
   L->length = i;
   for(j=0;j<L->length;j++){
		scanf("%d",&L->data[j]);
   }
   return 0;
}

6、查找指定索引位置上的数值并返回

int  getData (seqList *L,int index){
	int i=0;
	//判断顺序表是否已满
	if(isFull(*L)==1)
		return -1;//表已满,无法插入
	//判断已给出的索引是否合法
	if(index-1<0||index-1>L->length)
		return 0;
	else{
		while(i<L->length){
		  if(index-1 == i)
			  return L->data[index-1];
		i++;
		}
	}
	return 1;
}

7、查找指定数值所对应的索引值,并返回

int getIndex(seqList *L,dataType data){
	int i=0;
	while(i<L->length){
		if(L->data[i]==data)
			return i+1;
		else
			return 0;
	}
	return -1;

}

8、删除指定索引位置数据

int deleData(seqList *L,int index){
	int i=0,j=0;
   if(isEmpty(*L)==1)
	   return 0;//该表为空表
   if(index<=1||index-1>L->length)
	   return 0;
   else{
	   while(i<L->length){
		   if(index-1 == i ){
			   for(j=index;j<L->length;j++){
			    L->data[j-1]=L->data[j];
			   }
			   L->length--;
			   return 1;
		   }
		   i++;
	   
	   }
   }
   return 1;
}

9、数据插入

int insertData(seqList *L,int index,dataType data){
	//index 代表插入的位置,data 代表需要插入的元素值
    int j;
	//判断顺序表是否已满
	if(isFull(*L)==1)
		return -1;//表已满,无法插入
	//判断已给出的索引是否合法
	if(index<=0||index>L->length+1)
		return 0;
	//尾部直接添加
	if(index == L->length){
		L->data[index]= data;
		L->length++;
		return 1;
	}else{
		for (j=L->length-1;j>=index;j--){
			L->data[j+1] = L->data[j];
		}
		L->data[index-1] = data;
		L->length++;
		return  1;
	}
	return 0;
}

10、合并两个线性表

int combineList(seqList *La,seqList *Lb,seqList *Lc){
	int i = 0;
	int j = 0;
	int k = 0;
	while(i < La->length && j < Lb->length)
	{
		if(La->data[i] < Lb->data[j]){
		Lc->data[k] = La->data[i];
		i++;
		k++;
		}
		 if(La->data[i] > Lb->data[j]){
		Lc->data[k] = Lb->data[j];
		k++;
		j++;
		}
		if(La->data[i] == Lb->data[j]){
		Lc->data[k] = La->data[i];
		i++;
		k++;
		j++;
		}
	}
	while(i<La->length){
	   Lc->data[k]=La->data[i];
	   i++;
	   k++;
	}
	while(j<Lb->length){
		Lc->data[k]=Lb->data[j];
		j++;
		k++;
	}
	Lc->length= k;
    return 1;
}

11、节点元素的顺序输出

int display(seqList	*L){
	int i =0;
	while(i<L->length){
		printf("\t%d. %d\n",i,L->data[i]);
	    i++;
	}
	return 1;
}

为了操作方便,我这边设计了一个操作菜单

int operationList(seqList *L){
	int flag=1;
	int data;
	int index;
	int key;
	int ele;
	int local;
	while(flag){
  printf("\t1.初始化顺序表\n");
  printf("\t2.插入元素    \n");
  printf("\t3.获取指定位置的元素\n");
  printf("\t4.获取指定元素的位置\n");
  printf("\t5.删除指定位置元素\n");
  printf("\t6.展示当前顺序表\n");
  printf("\t0.退出操作系统\n");
  printf("\n");
  printf("请输入操作数字:\n");
  scanf("%d",&key);
  printf("\n");
    switch(key){
	case 1:
		add(L);
		break;
	case 2:
		printf("请输入目标位置以及元素值:");
		scanf("%d  %d",&index,&data);
		insertData(L,index,data);
		printf("\n");
		break;
	case 3:
		printf("请输入指定的位置:");
		scanf("%d",&index);
		ele=getData(L,index);
		printf("%d",index);
		printf("对应的元素为:");
		printf("%d ",ele);
		printf("\n");
		break;
	case 4:
		printf("请输入需要查找的元素:");
		scanf("%d",&data);
		local=getIndex(L,data);
		printf("%d",data);
		printf("所在的位置为:");
		printf("%d",local);
		printf("\n");
		break;
	case 5:
		printf("请输入需要删除的位置:");
		scanf("%d",&data);
		deleData(L,data);
		printf("\n");
		break;
	case 6:
		display(L);
		printf("\n");
		break;
	case 0:
		flag = 0;
		printf("\n");
		break;
	}
 }
	return 1;
}

主函数:

int main(){
	int key;
	int  isFlag=1;
	seqList La,Lb,Lc;
	initSeqList(&La);
	initSeqList(&Lb);
	initSeqList(&Lc);
	while(isFlag){
    printf("\t1.顺序表La的操作\n");
	printf("\t2.顺序表Lb的操作\n");
	printf("\t3.顺序表的合并操作\n");
	printf("\t4.显示合并后的顺序表\n");
	printf("\t0.退出当前操作\n");
	printf("\n请输入操作数字:");
		scanf("%d",&key);
		printf("\n");
	switch (key){
	case 1:
		operationList(&La);
		printf("\n");
	    break;
	case 2:
		operationList(&Lb);
		printf("\n");
		break;
	case 3:
		combineList(&La,&Lb,&Lc);
		printf("\n");
		break;
	case 4:
		display(&Lc);
		printf("\n");
		break;
	case 5:
		isFlag = 0;
		printf("\n");
		break;
	}
 }
	return 1;
}

运行结果较多,这边就不一一贴出来了,大家可以自己码出来试一下,关于数据结构,可能就向老师说得似的,需要多加练习,才能获更多认识与理解,好了不说了,我要去继续做数据结构的课程设计去了!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值