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

数据结构2022/7/19作业

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

数据结构2022/7/19作业

目录

作业

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

        1)(修改全部的相同值)

         2)(修改第一个相同值)

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

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

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓代码部分↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

seqlist.c中代码

seqlist.h中代码

main.c中代码


作业

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

        1)(修改全部的相同值)
int listUpdateValue(seqlist *S ,datatype old_e,datatype new_e)//按值修改
{
    int i,j;
    for (i=0;ilen;i++ )
    {
        if (S->data[i]==old_e)
        {
            S->data[i]=new_e;
        }
    }printf("修改成功n");
    
}

main.c函数中:

//调用按值修改函数(重复的相同值一并修改)
    listUpdateValue(S,4,3);
    listShow(S);

         2)(修改第一个相同值)
int listUpdateValue(seqlist *S ,datatype old_e,datatype new_e)//按值修改
{
    int i,j;
    for (i=0;ilen;i++ )
    {
        if (S->data[i]==old_e)
        {
            S->data[i]=new_e;
            printf("修改成功n");
            return 1;
        }
    }
}

main.c函数中:

//调用按值修改函数(重复的相同值一并修改)
    listUpdateValue(S,4,3);
    listShow(S);

 2>    完成按位置进行查找函数,返回查找到的数据​    
datatype listSearchPos(seqlist *S,int pos)//按位置查找
{
    if(listEmpty(S) || pos<0 || pos>S->len-1)
    {
        printf("查找失败n");
        return -1;
    }
    printf("第%d位置上的值为:%dn",pos,S->data[pos-1]);
}

main.c函数中:

//调用按位置查找函数
    listSearchPos(S,2);

3>    完成使用选择排序实现顺序表降序
void listSelectSort(seqlist *S)//通过选择排序 降序
{
    datatype temp;//交换变量
    for (int i=0; ilen; i++)
    {
        for (int j=i+1;jlen ; j++)
        {
            if (S->data[i]data[j])
            {
                temp=S->data[i];S->data[i]=S->data[j];S->data[j]=temp;
            }
        }
    }printf("排序成功n");
}

main.c函数中:

    printf("选择排序(降序)n");
    listSelectSort(S);
    listShow(S);

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓代码部分↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

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; //1表示空 0非空
}

//判满
int listFull(seqlist *S)
{
    return S->len==MAX? 1:0; //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; ilen; i++)
    {
        printf("%dt",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; ilen; 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; ilen; 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;
    }
    printf("第%d位置上的值为:%dn",pos,S->data[pos-1]);
}
int listUpdateValue(seqlist *S ,datatype old_e,datatype new_e)//按值修改
{
    int i,j;
    for (i=0;ilen;i++ )
    {
        if (S->data[i]==old_e)
        {
            S->data[i]=new_e;
            printf("修改成功n");
            return 1;
        }
    }printf("修改成功n");
    
}
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,j;   //循环变量
    datatype temp; //交换变量
    for (i=1;ilen ;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 listDeleteRepeat(seqlist *S)//去重
{
    int i,j;
    for (i=0;ilen;i++ )
    {
        for (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");
}

void listSelectSort(seqlist *S)//通过选择排序 降序
{
    datatype temp;//交换变量
    for (int i=0; ilen; i++)
    {
        for (int j=i+1;jlen ; j++)
        {
            if (S->data[i]data[j])
            {
                temp=S->data[i];S->data[i]=S->data[j];S->data[j]=temp;
            }
        }
    }printf("排序成功n");
}

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 *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 listDeleteRepeat(seqlist *S);//去重
void listFree(seqlist *S);
void listSelectSort(seqlist *S);
#endif

main.c中代码
#include"seqlist.h"
#include
#include
int main(int argc, const char *argv[])
{
	seqlist *S=listCreate();
	if(NULL==S)
	{
		return -1;
	}
	//调用添加函数
	listAdd(S,7);
	listAdd(S,5);
	listAdd(S,5);
	listAdd(S,2);
	listAdd(S,9);
	listAdd(S,4);
	listAdd(S,4);
	//调用遍历函数
	listShow(S);
	//调用插入函数
	listInsertPos(S,1,8);
	listShow(S);
	//调用任意位置删除
	listDeletePos(S,2);
	listShow(S);
	//按值查找
	int res=listSearchValue(S,4);
	if(res>=0)
	{
		printf("查找成功,在%d个位置n",res+1);
	}else if (res == -2)
	{
		printf("查找失败n");
	}
	//按位置修改函数
	listUpdatePos(S,-1,100);//位置不合法 修改失败
	listShow(S);
	listUpdatePos(S,2,0);//位置合法 修改成功
	listShow(S);
	//调用冒泡排序函数
	printf("冒泡排序(升序)n");
	listSort(S);
	listShow(S);
	//调用选择排序函数
	printf("选择排序(降序)n");
	listSelectSort(S);
	listShow(S);
	//调用按值修改函数(重复的相同值一并修改)
	listUpdateValue(S,4,3);
	listShow(S);
	//调用去重函数
	printf("去重前:");
	listShow(S);
	listDeleteRepeat(S);
	printf("去重后:");
	listShow(S);
	//调用按位置查找函数
	listSearchPos(S,2);
	//调用释放空间函数
	listFree(S);
	S=NULL;
	listShow(S);//空指针 无法显示顺序表
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018141.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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