1> 完成按值进行修改函数
int listUpdateValue(seqList *S,datatype old_e,datatype new_e)
{
if(listEmpty(S))
{
printf("空表,查找失败n");
return -1; //表空
}
for(int i=0;ilen;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位为:%dn",pos+1,S->data[pos]);
return 0;
}
3> 完成使用选择排序实现顺序表降序
//选择排序 降
void listSclectSort(seqList *S)
{
datatype temp;
for(int i=0; ilen; i++)
{
for(int j=i+1; jlen; 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#include 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#include #include //创建顺序表 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 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(pos<0 || pos>S->len-1) { printf("查找失败n"); return -1; } datatype e=S->data[pos]; printf("按位置查找成功,第%d位为:%dn",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 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 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 listDeletetRepeat(seqList *S) { if(listEmpty(S) || S->len<=1) { printf("去重失败n"); return; } for(int i=0;i len;i++) { for(int j=i+1;j 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 len; i++) { for(int j=i+1; j 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"); }



