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");
}
3092

被折叠的 条评论
为什么被折叠?



