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

2022/7/19---数据结构day1

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

2022/7/19---数据结构day1

创作本文的目的:记录自己的学习的历程

文章目录
  • 一、完成按值进行修改函数
    • 1.函数体
    • 2.测试代码
    • 3.运行结果
  • 二、完成按位置进行查找函数,返回查找到的数据
    • 1.函数体
    • 2.测试代码
    • 3.运行结果
  • 三、使用选择排序实现顺序表降序
    • 1.函数体
    • 2.测试代码
    • 3.运行结果
  • 附:全代码
    • 1.seqlist.h
    • 2.seqlist.c
    • 3.main.c

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

代码如下:

//按值更新元素
int listUpdataValue(seqList *S,datatype old,datatype new)
{
	if(listEmpty(S))
	{
		printf("数据满n");
		return -1;
	}
	for(int i=0;ilen;i++)
	{
		if(S->data[i]==old)
		{
			S->data[i]=new;
		}
	}
	printf("更新完毕n");
	return 0;
}
2.测试代码
#include 
#include 
#include "seqlist.h"

int main(int argc, const char *argv[])
{
	seqList *S = listCreate();
	if(NULL == S)
	{
		return -1;
	}

	//调用添加函数
	listAdd(S,9);
	listAdd(S,8);
	listAdd(S,7);
	listAdd(S,6);
	listAdd(S,5);
	listAdd(S,4);
	//printf("第%d个元素为:%dn",5,listSearchPos(S,4));
	//listInsertPos(S,7,10);
	//printf("第%d位n",listSearchValue(S,5)+1);
	//listUpdataPos(S,2,5);
	listUpdataValue(S,9,1);
	//listDeletePos(S,2);
	//listDeleteRepeat(S);
	//listSort(S);
	//listSelectSort(S);
	listShow(S);
	listFree(&S);
	return 0;
}
3.运行结果

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

代码如下:

//按位置查找
datatype listSearchPos(seqList *S,int pos)
{
	if(listEmpty(S))
	{
		printf("空,无数据n");
		return -1;
	}
	else if(pos<0 || pos>=S->len)
	{
		printf("位置错误n");
		return -2;
	}
	return S->data[pos];
}
2.测试代码

代码如下:

#include 
#include 
#include "seqlist.h"

int main(int argc, const char *argv[])
{
	seqList *S = listCreate();
	if(NULL == S)
	{
		return -1;
	}
	//调用添加函数
	listAdd(S,9);
	listAdd(S,8);
	listAdd(S,7);
	listAdd(S,6);
	listAdd(S,5);
	listAdd(S,4);
	printf("第%d个元素为:%dn",5,listSearchPos(S,4));
	//listInsertPos(S,7,10);
	//printf("第%d位n",listSearchValue(S,5)+1);
	//listUpdataPos(S,2,5);
	//listUpdataValue(S,9,1);
	//listDeletePos(S,2);
	//listDeleteRepeat(S);
	//listSort(S);
	//listSelectSort(S);
	listShow(S);
	listFree(&S);
	return 0;
}
3.运行结果

三、使用选择排序实现顺序表降序 1.函数体

代码如下:

//选择排序降序
void listSelectSort(seqList *S)
{
	int i,j,index;
	datatype temp;
	for(i=0;ilen;i++)
	{
		index=i;
		for(j=i+1;jlen;j++)
		{
			if(S->data[index]data[j])
			{
				index=j;
			}
		}
		temp=S->data[i];
		S->data[i]=S->data[index];
		S->data[index]=temp;
	}
	printf("排序成功n");
}
2.测试代码

代码如下:

#include 
#include 
#include "seqlist.h"

int main(int argc, const char *argv[])
{
	seqList *S = listCreate();
	if(NULL == S)
	{
		return -1;
	}

	//调用添加函数
	listAdd(S,5);
	listAdd(S,2);
	listAdd(S,7);
	listAdd(S,3);
	listAdd(S,4);
	listAdd(S,9);
	//printf("第%d个元素为:%dn",5,listSearchPos(S,4));
	//listInsertPos(S,7,10);
	//printf("第%d位n",listSearchValue(S,5)+1);
	//listUpdataPos(S,2,5);
	//listUpdataValue(S,9,1);
	//listDeletePos(S,2);
	//listDeleteRepeat(S);
	//listSort(S);
	listSelectSort(S);
	listShow(S);
	listFree(&S);
	return 0;
}
3.运行结果


附:全代码 1.seqlist.h
#ifndef __SEQLIST_H__
#define __SEQLIST_H__

#define MAX 20

typedef int datatype;

typedef struct
{
	datatype data[MAX]; //存储顺序表的数组
	int len;            //表示顺序表长度
}seqList;

//生成堆空间
seqList *listCreate();
//判断是否空
int listEmpty(seqList *);
//判断元素是否满
int listFull(seqList *);
//顺序添加
int listAdd(seqList * ,datatype );
//遍历
void listShow(seqList *);
//按位置添加
int listInsertPos(seqList *,int ,datatype );
//按位置删除
int listDeletePos(seqList *,int );
//按值查找
int listSearchValue(seqList *,datatype );
//按位置查找
int listSearchPos(seqList *,int);
//按值更新元素
int listUpdataValue(seqList *,datatype ,datatype );
//按位置更新元素
int listUpdataPos(seqList *,int ,datatype );
//排序
void listSort(seqList *);
//选择排序
void listSelectSort(seqList *);
//去重
void listDeleteRepeat(seqList *);
//释放表
void listFree(seqList **);

#endif
2.seqlist.c
#include "seqlist.h"
#include 
#include 
#include 

//创建顺序表
seqList *listCreate()
{
	//在堆区申请一个顺序表的空间,将申请的地址给S
	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("emptyn");
		return;
	}

	//遍历
	printf("元素:");
	for(int i=0;ilen;i++)
	{
		printf("%dt",S->data[i]);
	}
	printf("n");
}
//按位置添加
int listInsertPos(seqList *S,int pos,datatype e)
{
	if(listFull(S))
	{
		printf("元素已满n");
		return -1;
	}
	else 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");
	return 0;
}
//按位置删除
int listDeletePos(seqList *S,int pos)
{
	if(listEmpty(S))
	{
		printf("空,无数据n");
		return -1;
	}
	else if(pos<0 ||pos>S->len-1)
	{
		printf("位置不正确n");
		return -2;
	}
	for(int i=pos;ilen-1;i++)
	{
		S->data[i]=S->data[i+1];
	}
	S->len--;
	return 0;
}
//按值查找 返回位置
int listSearchValue(seqList *S,datatype e)
{
	if(listEmpty(S))
	{
		printf("空,无数据n");
		return -1;
	}
	for(int i=0;ilen;i++)
	{
		if(e == S->data[i])
		{
			return i;
		}
	}
	printf("未查到此值n");
	return -2;
}
//按位置查找
datatype listSearchPos(seqList *S,int pos)
{
	if(listEmpty(S))
	{
		printf("空,无数据n");
		return -1;
	}
	else if(pos<0 || pos>=S->len)
	{
		printf("位置错误n");
		return -2;
	}
	return S->data[pos];
}
//按值更新元素
int listUpdataValue(seqList *S,datatype old,datatype new)
{
	if(listEmpty(S))
	{
		printf("数据满n");
		return -1;
	}
	for(int i=0;ilen;i++)
	{
		if(S->data[i]==old)
		{
			S->data[i]=new;
		}
	}
	printf("更新完毕n");
	return 0;
}
//按位置更新元素
int listUpdataPos(seqList *S,int pos,datatype new)
{
	if(listEmpty(S) || pos<0 || pos>=S->len)
	{
		printf("修改失败n");
		return -1;
	}
	S->data[pos] = new;
	printf("修改成功n");
	return 0;

}
//冒泡排序升序
void listSort(seqList *S)
{
	int i,j;
	datatype temp;
	for(i=1;ilen-1;i++)
	{
		for(j=0;jlen-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 listSelectSort(seqList *S)
{
	int i,j,index;
	datatype temp;
	for(i=0;ilen;i++)
	{
		index=i;
		for(j=i+1;jlen;j++)
		{
			if(S->data[index]data[j])
			{
				index=j;
			}
		}
		temp=S->data[i];
		S->data[i]=S->data[index];
		S->data[index]=temp;
	}
	printf("排序成功n");
}
//去重
void listDeleteRepeat(seqList *S)
{

	if(S->len<=1)
	{
		printf("去重失败n");
		return;
	}
	for(int i=0;ilen;i++)
	{
		for(int j=i+1;jlen;j++)
		{
			if(S->data[i]==S->data[j])
			{
				listDeletePos(S,j);
				j--;
			}
		}
	}
	printf("去重成功n");
}
//释放表
void listFree(seqList **S)
{
	if(NULL != *S)
	{
		free(*S);
	}

	*S=NULL; //防止野指针
	printf("释放成功n");
}
3.main.c
#include 
#include 
#include "seqlist.h"

int main(int argc, const char *argv[])
{
	seqList *S = listCreate();
	if(NULL == S)
	{
		return -1;
	}

	//调用添加函数
	listAdd(S,5);
	listAdd(S,2);
	listAdd(S,7);
	listAdd(S,3);
	listAdd(S,4);
	listAdd(S,9);
	//printf("第%d个元素为:%dn",5,listSearchPos(S,4));
	//listInsertPos(S,7,10);
	//printf("第%d位n",listSearchValue(S,5)+1);
	//listUpdataPos(S,2,5);
	//listUpdataValue(S,9,1);
	//listDeletePos(S,2);
	//listDeleteRepeat(S);
	//listSort(S);
	listSelectSort(S);
	listShow(S);
	listFree(&S);
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1022933.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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