文章目录创作本文的目的:记录自己的学习的历程
- 一、完成按值进行修改函数
- 1.函数体
- 2.测试代码
- 3.运行结果
- 二、完成按位置进行查找函数,返回查找到的数据
- 1.函数体
- 2.测试代码
- 3.运行结果
- 三、使用选择排序实现顺序表降序
- 1.函数体
- 2.测试代码
- 3.运行结果
- 附:全代码
- 1.seqlist.h
- 2.seqlist.c
- 3.main.c
代码如下:
//按值更新元素
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.测试代码
#include3.运行结果 二、完成按位置进行查找函数,返回查找到的数据 1.函数体#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; }
代码如下:
//按位置查找
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.测试代码
代码如下:
#include3.运行结果 三、使用选择排序实现顺序表降序 1.函数体#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; }
代码如下:
//选择排序降序
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.测试代码
代码如下:
#include3.运行结果#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; }
附:全代码 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" #include3.main.c#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;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; } 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;i len-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;i len;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;i len;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;i len-1;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 listSelectSort(seqList *S) { int i,j,index; datatype temp; for(i=0;i len;i++) { index=i; for(j=i+1;j len;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;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 listFree(seqList **S) { if(NULL != *S) { free(*S); } *S=NULL; //防止野指针 printf("释放成功n"); }
#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; }



