目录
作业
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");
}
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
#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; i len; 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; i 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 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; } printf("第%d位置上的值为:%dn",pos,S->data[pos-1]); } int listUpdateValue(seqlist *S ,datatype old_e,datatype new_e)//按值修改 { int i,j; for (i=0;i len;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;i len ;i++ ) { for (j=0;j 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 listDeleteRepeat(seqlist *S)//去重 { int i,j; for (i=0;i len;i++ ) { for (j=i+1;j len ; 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; i len; i++) { for (int j=i+1;j len ; j++) { if (S->data[i] data[j]) { temp=S->data[i];S->data[i]=S->data[j];S->data[j]=temp; } } }printf("排序成功n"); }



