数据结构:day1 ->顺序表

学习C语言的数据结构的day1

目录

作业

一、完成按值进行修改函数

二、完成按位置进行查找函数,返回查找到的数据

三、完成使用选择排序实现顺序表降序

总结:代码如下



作业


1>完成按值进行修改函数
2>完成按位置进行查找函数,返回查找到的数据
3>完成使用选择排序实现顺序表降序


一、完成按值进行修改函数

//按值修改
int listUpdateValue(seqlist *s, datatype old_e, datatype new_e)
{
	int flag=0;
	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;
			flag++;
		}
	}
	if(0 == flag)
	{
		printf("修改失败\n");
		return -1;
	}else
	{
		printf("修改成功\n");
		return 0;
	}
}


二、完成按位置进行查找函数,返回查找到的数据

//按位置查找,返回查找到对应的数据
datatype listSearchPos(seqlist *s, int pos)
{
	if(listEmpty(s) || pos < 0 || pos > s->len-1)
	{
		printf("查找失败\n");
		return -1;
	}
	return s->data[pos];

}

三、完成使用选择排序实现顺序表降序

//降序
void listNosort(seqlist *s)
{
	int i,k;
	datatype temp;
	for(i=0;i<s->len;i++)
	{
		for(k=1+i;k<s->len;k++)
		{
			if(s->data[i] < s->data[k])
			{
				temp=s->data[i];
				s->data[i]=s->data[k];
				s->data[k]=temp;
			}
		}
	}
	printf("降序排序成功\n");
}

总结:代码如下

mian.c

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

int main(int argc, const char *argv[])
{
	seqlist *s=listCreate();
	if(NULL == s)
	{
		return -1;
	}
	listAdd(s,7);
	listAdd(s,2);
	listAdd(s,5);
	listAdd(s,5);
	listAdd(s,8);
	listShow(s);
	listInsertPos(s,1,8);
	listShow(s);
	listDeletePos(s,10);
	listShow(s);

	int res=listSearchValue(s, 100);
	if(res >= 0)
	{
		printf("查找成功,在第%d个位置\n",res);
	}else if(res == -1)
	{
		printf("表空,查找失败\n");
	}else if(res == -2)
	{
		printf("没找到您要查找的元素\n");

	}

	listUpdatePos(s,0,100);
	listShow(s);
	listSort(s);
	listShow(s);
	listNosort(s);
	listShow(s);
	printf("*****\n");

	listUpdateValue(s,8,7);
	listShow(s);
	listDeleteRepeat(s);
	listShow(s);

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

seqlist.c

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

//创建//顺序表
seqlist* listCreate()
{
	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("表满,添加失败");
		return -1;
	}
	s->data[s->len]=e;
	s->len ++;
	printf("添加成功\n");
	return 0;
}
//遍历函数
void listShow(seqlist *s)
{
	if(NULL == s)
	{
		printf("所给顺序表不合法\n");
		return;
	}
	int i=0;
	for(i=0;i<s->len;i++)
	{
		printf(" %d ",s->data[i]);
	}
	printf("\n");
}
//任意位置插入
int listInsertPos(seqlist *s, int pos, datatype e)
{
	if(pos > s->len || 0 > pos)
	{
		printf("插入失败,位置不合法\n");
		return -1;
	}
	if(listFull(s))
	{
		printf("表格已满,插入失败\n");
		return -2;
	}
	int i=0;
	for(i=s->len-1;i>=pos;i--)
	{
		s->data[i+1]=s->data[i];
	}
	s->data[pos]=e;
	s->len++;
	printf("插入成功\n");
	return 0;

}
//任意位置删除
int listDeletePos(seqlist *s, int pos)
{
	if(listEmpty(s) || pos<0 || pos>s->len-1)
	{
		printf("删除失败\n");
		return -1;
	}

	int i=0;
	for(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(listEmpty(s) || pos < 0 || pos > s->len-1)
	{
		printf("查找失败\n");
		return -1;
	}
	return s->data[pos];

}
//
//按值修改
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])
		{
			old_e=new_e;
			return 0;
		}
	}
	printf("修改失败\n");
	return -1;

}
//按位置修改
int listUpdatePos(seqlist *s, int pos, datatype new_e)
{
	if(listEmpty(s) || 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,k;
	datatype temp;
	for(i=1;i<s->len;i++)
	{
		for(k=0;k<s->len-i;k++)
		{
			if(s->data[k] > s->data[k+1])
			{
				temp=s->data[k];
				s->data[k]=s->data[k+1];
				s->data[k+1]=temp;
			}
		}
	}
	printf("升序排序成功\n");
}

//去重
void listDeleteRepeat(seqlist *s)
{
	if(s->len <= 1)
	{
		printf("去重失败\n");
		return;
	}
	int i,k;
	for(i=0;i<s->len;i++)
	{
		for(k=i+1;k<s->len;k++)
		{
			if(s->data[i] == s->data[k])
			{
				listDeletePos(s,k);
				k--;
			}
		}
	}
	printf("去重成功\n");
}

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

//降序
void listNosort(seqlist *s)
{
	int i,k;
	datatype temp;
	for(i=1;i<s->len;i++)
	{
		for(k=0;k<s->len-i;k++)
		{
			if(s->data[k] < s->data[k+1])
			{
				temp=s->data[k];
				s->data[k]=s->data[k+1];
				s->data[k+1]=temp;
			}
		}
	}
	printf("降序排序成功\n");
}
ubuntu@ubuntu:day16$ vi seqlist.c
ubuntu@ubuntu:day16$ cat seqlist.c
#include <stdlib.h>
#include <string.h>
#include "seqlist.h"
#include <stdio.h>

//创建//顺序表
seqlist* listCreate()
{
	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("表满,添加失败");
		return -1;
	}
	s->data[s->len]=e;
	s->len ++;
	printf("添加成功\n");
	return 0;
}
//遍历函数
void listShow(seqlist *s)
{
	if(NULL == s)
	{
		printf("所给顺序表不合法\n");
		return;
	}
	int i=0;
	for(i=0;i<s->len;i++)
	{
		printf(" %d ",s->data[i]);
	}
	printf("\n");
}
//任意位置插入
int listInsertPos(seqlist *s, int pos, datatype e)
{
	if(pos > s->len || 0 > pos)
	{
		printf("插入失败,位置不合法\n");
		return -1;
	}
	if(listFull(s))
	{
		printf("表格已满,插入失败\n");
		return -2;
	}
	int i=0;
	for(i=s->len-1;i>=pos;i--)
	{
		s->data[i+1]=s->data[i];
	}
	s->data[pos]=e;
	s->len++;
	printf("插入成功\n");
	return 0;

}
//任意位置删除
int listDeletePos(seqlist *s, int pos)
{
	if(listEmpty(s) || pos<0 || pos>s->len-1)
	{
		printf("删除失败\n");
		return -1;
	}

	int i=0;
	for(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(listEmpty(s) || pos < 0 || pos > s->len-1)
	{
		printf("查找失败\n");
		return -1;
	}
	return s->data[pos];

}
//
//按值修改
int listUpdateValue(seqlist *s, datatype old_e, datatype new_e)
{
	int flag=0;
	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;
			flag++;
		}
	}
	if(0 == flag)
	{
		printf("修改失败\n");
		return -1;
	}else
	{
		printf("修改成功\n");
		return 0;
	}
}
//按位置修改
int listUpdatePos(seqlist *s, int pos, datatype new_e)
{
	if(listEmpty(s) || 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,k;
	datatype temp;
	for(i=1;i<s->len;i++)
	{
		for(k=0;k<s->len-i;k++)
		{
			if(s->data[k] > s->data[k+1])
			{
				temp=s->data[k];
				s->data[k]=s->data[k+1];
				s->data[k+1]=temp;
			}
		}
	}
	printf("升序排序成功\n");
}

//去重
void listDeleteRepeat(seqlist *s)
{
	if(s->len <= 1)
	{
		printf("去重失败\n");
		return;
	}
	int i,k;
	for(i=0;i<s->len;i++)
	{
		for(k=i+1;k<s->len;k++)
		{
			if(s->data[i] == s->data[k])
			{
				listDeletePos(s,k);
				k--;
			}
		}
	}
	printf("去重成功\n");
}

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

//降序
void listNosort(seqlist *s)
{
	int i,k;
	datatype temp;
	for(i=0;i<s->len;i++)
	{
		for(k=1+i;k<s->len;k++)
		{
			if(s->data[i] < s->data[k])
			{
				temp=s->data[i];
				s->data[i]=s->data[k];
				s->data[k]=temp;
			}
		}
	}
	printf("降序排序成功\n");
}

seqlist.h

#ifndef _SEQLIST__
#define _SEQLIST__

#define MAX 20
typedef int datatype;

typedef struct
{
	datatype data[MAX];
	int len;
}seqlist;

seqlist* listCreate();
//判空
int listEmpty(seqlist *s);
//判满
int listFull(seqlist *s);
//添加元素
int listAdd(seqlist *s,datatype e);
//遍历函数
void listShow(seqlist *s);
//任意位置插入
int listInsertPos(seqlist *s, int pos, datatype e);
//任意位置删除
int listDeletePos(seqlist *s, int pos);
//按值查找,返回对应的位置
int listSearchValue(seqlist *s, datatype e);
//按位置查找,返回查找到对应的位置
datatype listSearchPos(seqlist *s, int pos);
//按值修改
int listUpdateValue(seqlist *s, datatype old_e, datatype new_e);
//按位置修改
int listUpdatePos(seqlist *s, int pos, datatype new_e);
//升序
void listSort(seqlist *s);
//降序
void listNosort(seqlist *s);
//去重
void listDeleteRepeat(seqlist *s);
//释放表
void listFree(seqlist *s);



#endif

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值