4-数据结构-线性表-顺序表的查找和修改以及总结

问题:
        顺序表的查找以及修改,跟数组一样,直接进行遍历查找,以及直接找到数组中某个值

思路:

  1. 查找——目的时找到对应值的数组下标
  2. 输入所需数组,所需查找的值。对顺序表中数组进行遍历,若找到,则返回下标即可。
  3. 输入你想删除的值,然后实现删除操作。
  4. 流程——1.先输入所需删除的值。2.再用查找,找到其下标。3.若返回的下标合法,则进行删除操作。
    printf("你想删除哪个数\n");
    	int num;
    	scanf("%d",&num);
    	int n = sqfind(&s,num); 
    	if(n != -1) 
    	{
    		sqpop(&s,n);
    		sqprintf(&s);
    	}
    	else
    		printf("找不到你说的这个数啊,老铁\n");

  5. 若想删除所有一样的数,若删除所有的2,只需循环,之后再查找即可。
    printf("你想删除哪个数\n");
    	int t;
    	scanf("%d",&t);
    	int pos = sqfind(&s,t); 
    	while(pos != -1) 
    	{
    		sqpop(&s,pos);
    		pos = sqfind(&s,t);
    		sqprintf(&s);
    	}
    

  6. 修改,一样的操作,先给修改函数写好。只需给该下标处的值,赋值,进行覆盖即可。

    printf("你想修改哪个数\n");
    	int shu;
    	scanf("%d",&shu);
    	int q = sqfind(&s,shu); 
    	if(q != -1) 
    	{
    		printf("修改成什么\n");
    		int num01;
    		scanf("%d",&num01);
    		sqmodify(&s,q,num01);
    		sqprintf(&s);
    	}
    	else
    		printf("找不到你说的这个数啊,老铁\n");

  7. 下面是所有代码总结。包含前面顺序表的定义,初始化,打印,检查,插入和删除

代码如下:

#include <stdio.h>
#include <stdlib.h>
//定义顺序表
typedef int sqdatatype;
typedef struct sllist
{
	sqdatatype *a;
	int size;
	int capacity;
}sl; 
//初始化顺序表
void sqinint(sl *s)
{
	s->a=NULL;
	s->capacity=0;
	s->size=0;
}
//打印顺序表
void sqprintf(sl *s)
{
	int i;
	for(i=0;i<s->size;i++)
	{
		printf("%d ",s->a[i]);
	}
	printf("当前容量为%d\n",s->capacity);
}
//检查顺序表为空或满,不满足,则扩容
void sqcheck(sl *s)
{
	if(s->capacity==s->size)
	{
		int newcapacity= s->capacity == 0 ? 4 : s->capacity * 2;
		sqdatatype *temp=(sqdatatype*)realloc(s->a,sizeof(sqdatatype)*newcapacity);
		if(temp==NULL)
		{
			printf("扩容失败\n"); 
		//	exit(-1);
		}
		s->a=temp;
		s->capacity=newcapacity;
	}
 } 
//插入某个位置
void sqpush(sl *s,int i,int w)//这里的i插入的位置为数组下标 
{
	if(i<0 || i>s->size)
	{
		printf("插入位置不合法\n");
	//	exit(-1);	
	}
	sqcheck(s);
	int end =s->size-1;
	while(end >= i )
	{
		s->a[end+1]=s->a[end];
		end--;
	}	
	s->a[i]=w;
	s->size++;
} 
//删除某个位置
void sqpop(sl *s,int i)
{
	if(i<0 || i>=s->size)
	{
		printf("删除位置不合法\n");
	//	exit(-1);	
	}	
	sqcheck(s);
	int begin = i;
	while(begin < s->size-1)
	{
		s->a[begin]=s->a[begin+1];
		begin++; 
	}
	s->size--;
} 
//头插法插入 
void sqhead(sl *s,int w)
{
	sqpush(s,0,w);//所传的位置值,都为数组下标; 
}
//尾插法插入
void sqrear(sl *s,int w)
{
	sqpush(s,s->size,w);	
} 
//查找数值——所处下标并返回
int sqfind(sl *s,int n)
{
	if(s==NULL)
	printf("该顺序表无效\n");
	int i;
	for(i=0;i<s->size;i++)
	{
		if(s->a[i]==n)
		return i;
	}
	return -1;
} 
void sqmodify(sl *s,int i,int w)
{
	if(s==NULL)
	{
		printf("修改时,顺序表不存在\n");
	}
	s->a[i]=w;
}
int main()
{
	sl s;
	sqinint(&s);
	sqhead(&s,5);
	sqhead(&s,2);
	sqhead(&s,2);
	sqhead(&s,2);
	sqhead(&s,5);
	sqprintf(&s);
	
	sqpush(&s,1,5000);
	sqprintf(&s);
	sqpop(&s,1);
	sqprintf(&s);
	/*printf("你想删除哪个数\n");
	int num;
	scanf("%d",&num);
	int n = sqfind(&s,num); 
	if(n != -1) 
	{
		sqpop(&s,n);
		sqprintf(&s);
	}
	else
		printf("找不到你说的这个数啊,老铁\n");
		*/
	//若想删除所有的2
	printf("你想删除哪个数\n");
	int t;
	scanf("%d",&t);
	int pos = sqfind(&s,t); 
	while(pos != -1) 
	{
		sqpop(&s,pos);
		pos = sqfind(&s,t);
		sqprintf(&s);
	}

	printf("你想修改哪个数\n");
	int shu;
	scanf("%d",&shu);
	int q = sqfind(&s,shu); 
	if(q != -1) 
	{
		printf("修改成什么\n");
		int num01;
		scanf("%d",&num01);
		sqmodify(&s,q,num01);
		sqprintf(&s);
	}
	else
		printf("找不到你说的这个数啊,老铁\n");
	
	
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔心小韩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值