数据结构第一天7.19

1> 完成按值进行修改函数

 

int listUpdateValue(seqList *S,datatype old_e,datatype new_e)
{
    if(listEmpty(S))
   {
	   printf("空表,查找失败\n");
	   return -1;        //表空
   }

   for(int i=0;i<S->len;i++)
   {
	   if(old_e==S->data[i])
	   {
		   S->data[i]=new_e;
		   return i;
	   }
   }
   return -2;
}

​ 2> 完成按位置进行查找函数,返回查找到的数据 ​

 

//按位置查找
datatype listSearchPos(seqList *S,int pos)
{
  if(pos<0 || pos>S->len-1)
  {
	  printf("查找失败\n");
	  return -1;
  }
 
  datatype e=S->data[pos];
  printf("按位置查找成功,第%d位为:%d\n",pos+1,S->data[pos]);
  return 0;
  }

 

3> 完成使用选择排序实现顺序表降序

//选择排序 降
void listSclectSort(seqList *S)
{
	datatype temp;
	for(int i=0; i<S->len; i++)
	{
		for(int j=i+1; j<S->len; j++)
			{
				if(S->data[i] < S->data[j])
				{
					temp=S->data[i];
			        S->data[i]=S->data[j];
			        S->data[j]=temp;

				}
			}
	}
	printf("选择排序成功\n");
}

 

主函数:

#include"seqlist.h"
#include<stdio.h>
#include<stdlib.h>

int main(int argc, const char *argv[])
{
	//seqList s; 
	//s.len=0;
	seqList *S=listCeate();
	if(NULL==S)
	{
		return -1;
	}


	listAdd(S,7);
	listAdd(S,7);
	listAdd(S,7);
	listAdd(S,2);
	listAdd(S,5);
	listAdd(S,6);
	listAdd(S,4);
    //listDeletetRepeat(S);
	//listShow(S);



	listShow(S);

	listInsertPos(S,1,8);
	listShow(S);
	listDeletePos(S,0);
	listShow(S);
    
	//按值查找
	int res = listSearchValue(S,100);
	if(res>=0)
	{
		printf("查找成功,在第%d个位置\n",res+1);
	}else if(res == -1)
	{
      printf("表空,查找失败\n");
	}else if(res == -2)
	{
		printf("没找到要找的元素\n");
	}

    //按位置查找
	listSearchPos(S,3);

	//按值修改
	int res1= listUpdateValue(S,5,50);
	if(res1>=0)
	{
		printf("修改成功,在第%d个位置\n",res1+1);
	}else if(res1 == -1)
	{
      printf("表空,查找失败\n");
	}else if(res1 == -2)
	{
		printf("没找到要改的元素\n");
	}

    
	//按位置修改
	listUpdatePos(S,3,100);
	listShow(S);
	//升序
    listSort(S);
	listShow(S);
    //降序
	listSclectSort(S);
	listShow(S);
	//去重
	listDeletetRepeat(S);
	listShow(S);

	listFree(S);
    
	S=NULL;
	listShow(S);
	
	return 0;
}

 

seqlist.c全代码

#include"seqlist.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//创建顺序表
seqList* listCeate()
{
	seqList *S= (seqList*)malloc(sizeof(seqList));
	if(NULL == S)
	{
		printf("申请空间失败\n");
		return NULL;
	}
	memset(S->data,0,sizeof(S->data));
	S->len = 0;

	printf("创建成功\n");
	return S;
}


//判空
int listEmpty(seqList *S)
{
	if(NULL==S)
	{printf("所给顺序不合法\n");
		exit(0);
	}
	return S->len==0? 1 : 0;
}

//判满
int listFull(seqList *S)
{
	return S->len==MAX ? 1:0;
}

//添加元素
int listAdd(seqList *S,datatype e)
{
	if(listFull(S))
	{
	printf("表满,添加失败\n");
	return -1;
	}

	//添加逻辑
	S->data[S->len] = e;
	S->len++;
	printf("添加成功\n");
	return 0;
}

//遍历
void listShow(seqList *S)
{  
	//判断逻辑
	if(listEmpty(S))
	{
		printf("空空如也,遍历失败\n");
		return;
	}

	//遍历
	printf("目前顺序表中元素分别是: ");
	for(int i=0;i<S->len;i++)
	{
		printf("%d\t",S->data[i]);

	}
	printf("\n");
  
}

//任意位置插入
int listInsertPos(seqList *S,int pos,datatype e)
{
  //判断逻辑
  if(listFull(S))
  {
	  printf("表满,插入失败\n");
	  return -1;
  }
  if(pos<0 || pos>S->len)
  {
	  printf("位置不合法,插入失败\n");
	  return -2;
  }
  //腾空  插入数据
  for(int i=S->len-1;i>=pos;i--)
  {
	  S->data[i+1]=S->data[i];
  }
  S->data[pos] = e;
  S->len++;
  printf("插入成功\n");
}

//任意位置删除
int listDeletePos(seqList *S,int pos)
{
   if(listEmpty(S) || pos<0 || pos>S->len-1)
   {
	   printf("删除失败\n");
		   return -1;
   }
   for(int i=pos+1;i<S->len;i++)
   {
	   S->data[i-1]=S->data[i];

   }
   S->len--;
   printf("删除成功\n");
   return 0;

}

//按值查找 返回对应的位置
int listSearchValue(seqList *S,datatype e)
{
   if(listEmpty(S))
   {
	   printf("空表,查找失败\n");
	   return -1;        //表空
   }

   for(int i=0;i<S->len;i++)
   {
	   if(e==S->data[i])
	   {
		   return i;
	   }
   }
   return -2;   //表中没找到
}

//按位置查找
datatype listSearchPos(seqList *S,int pos)
{
  if(pos<0 || pos>S->len-1)
  {
	  printf("查找失败\n");
	  return -1;
  }
 
  datatype e=S->data[pos];
  printf("按位置查找成功,第%d位为:%d\n",pos+1,S->data[pos]);
  return 0;
  }
  




//按值修改
int listUpdateValue(seqList *S,datatype old_e,datatype new_e)
{
    if(listEmpty(S))
   {
	   printf("空表,查找失败\n");
	   return -1;        //表空
   }

   for(int i=0;i<S->len;i++)
   {
	   if(old_e==S->data[i])
	   {
		   S->data[i]=new_e;
		   return i;
	   }
   }
   return -2;
}

//按位置修改
int listUpdatePos(seqList *S,int pos,datatype new_e)
{
  //判断逻辑
  if(pos<0 || pos>S->len-1)
  {
	  printf("修改失败\n");
	  return -1;
  }
  //修改逻辑
  S->data[pos] = new_e;
  printf("修改成功\n");
  return 0;
}

//冒泡排序 升
void listSort(seqList *S)
{
	int i,j;
	datatype temp;
	for(i=1;i<S->len;i++)
	{
		for(j=0;j<S->len-i;j++)
		{
			if(S->data[j]>S->data[j+1])
			{
				temp=S->data[j];S->data[j]=S->data[j+1];S->data[j+1]=temp;
			}
		}
	}
    printf("排序成功\n");
}

//去重
void listDeletetRepeat(seqList *S)
{
   if(listEmpty(S) || S->len<=1)
   {
	   printf("去重失败\n");   
	   return;
   }

  for(int i=0;i<S->len;i++)
  {
	  for(int j=i+1;j<S->len;j++)
	  {
         if(S->data[i]==S->data[j])
		 {
			 listDeletePos(S,j);j--;
		 }
	  }
  }
  printf("去重成功\n");

}


//选择排序 降
void listSclectSort(seqList *S)
{
	datatype temp;
	for(int i=0; i<S->len; i++)
	{
		for(int j=i+1; j<S->len; j++)
			{
				if(S->data[i] < S->data[j])
				{
					temp=S->data[i];
			        S->data[i]=S->data[j];
			        S->data[j]=temp;

				}
			}
	}
	printf("选择排序成功\n");
}


//释放表
void listFree(seqList *S)
{
	if(NULL!=S)
	{
		free(S);
	}
	S=NULL;
	printf("释放成功\n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值