- seqlist.h (库文件)
- seqlist.c (函数封装)
- 1、作业函数
- 1.1 按值修改。
- 1.2按位置查找返回值
- 1.3选择排序降序
- 2、全部函数
- main.c (主函数)
- 部分结果展示
下面展示 源代码。
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#define MAX 20
typedef int datatype;
typedef struct
{
datatype data[MAX];
int len;
}seqList;
//创建顺序表
seqList *listCreate();
//添加元素
int listAdd(seqList *S, datatype e);
//判空
int listempty(seqList *S);
//判满
int listFull(seqList *S);
//遍历
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 listUnique(seqList *S);
//选择排序降序
void listChooseSort(seqList *S);
//释放表
void listFree(seqList **S);
#endif
seqlist.c (函数封装)
1、作业函数
1.1 按值修改。
//按值修改
int listUpdateValue(seqList *S, datatype old_e, datatype new_e)
{
int i;
if(listEmpty(S))
{
printf("修改失败,表为空n");
return -1;
}
for(i=0; ilen; i++)
{
if(S->data[i] == old_e)
{
S->data[i] = new_e;
printf("修改成功n");
return 0;
}
}
if(i == S->len)
{
printf("修改失败,旧值不存在n");
return -2;
}
}
1.2按位置查找返回值
//按位置查找返回值
datatype listSearchPos(seqList *S, int pos)
{
if(listEmpty(S))
{
return -1; //判断为空返回-1
}
else if(pos<0 || pos>=S->len)
{
return -2; //输入不合法返回-2
}
for(int i=0; ilen; i++)
{
if(pos == i)
{
return S->data[i];
}
}
}
主函数内容
//按位置查找返回值
res = listSearchPos(S, 8);
if(res >= 0)
{
printf("查找成功,值为%dn", res);
}
else if(res == -1)
{
printf("查找失败,表为空n");
}
else if(res == -2)
{
printf("查找失败,输入位置不合法n");
}
1.3选择排序降序
//选择排序降序
void listChooseSort(seqList *S)
{
int i, j;
int max, temp, index;
for(i=0; ilen; i++)
{
index = i;
max = S->data[i];
for(j=i+1; jlen; j++)
{
if(S->data[j] > max)
{
max = S->data[j];
index = j;
}
}
temp = S->data[i];
S->data[i] = S->data[index];
S->data[index] = temp;
}
}
2、全部函数
下面展示 源代码。
#includemain.c (主函数)#include #include #include"seqlist.h" //创建顺序表 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; //0表示非空,1表示空 } //判满 int listFull(seqList *S) { return S->len==MAX ? 1:0; //0表示不满,1表示满 } //添加元素 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; } 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; i++) { S->data[i] = S->data[i+1]; } S->len--; printf("删除成功n"); return 0; } //按值查找返回下标 int listSearchValue(seqList *S, datatype e) { if(listEmpty(S)) { return -1; } for(int i=0; i len; i++) { if(S->data[i] == e) { return i; } } return -2; } //按位置查找返回值 datatype listSearchPos(seqList *S, int pos) { if(listEmpty(S)) { return -1; } else if(pos<0 || pos>=S->len) { return -2; } for(int i=0; i len; i++) { if(pos == i) { return S->data[i]; } } } //按值修改 int listUpdateValue(seqList *S, datatype old_e, datatype new_e) { int i; if(listEmpty(S)) { printf("修改失败,表为空n"); return -1; } for(i=0; i len; i++) { if(S->data[i] == old_e) { S->data[i] = new_e; printf("修改成功n"); return 0; } } if(i == S->len) { printf("修改失败,旧值不存在n"); return -2; } } //按位置修改 int listUpdatePos(seqList *S, int pos, datatype new_e) { if(listEmpty(S)) { printf("修改失败,表为空n"); return -1; } else if(pos<0 || pos>=S->len) { printf("修改失败,输入的位置不合法n"); return -2; } for(int i=0; i len; i++) { if(i == pos) { S->data[i] = new_e; printf("修改成功n"); return 0; } } } //排序 void listSort(seqList *S) { int i, j; datatype temp; if(listEmpty(S)) { printf("排序失败,表为空n"); } 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; } } } } //去重 void listUnique(seqList *S) { int i, j, k; if(S->len<=1) { printf("去重失败n"); } 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 listChooseSort(seqList *S) { int i, j; int index; int max, temp; for(i=0; i len; i++) { index = i; max = S->data[i]; for(j=1; j len-i; j++) { if(S->data[j] > max) { max = S->data[j]; index = j; } } temp = S->data[i]; S->data[i] = S->data[index]; S->data[index] = temp; } } //释放表 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, 7); listAdd(S, 2); listAdd(S, 5); listShow(S); //任意位置插入 listInsertPos(S, 3, 7); listInsertPos(S, 4, 7); listInsertPos(S, 5, 5); listInsertPos(S, 6, 7); listShow(S); //任意位置删除 listDeletePos(S, 6); listShow(S); //按值查找 int res = listSearchValue(S, 8); if(res>=0) { printf("查找成功,下标为%dn", res); } else if(res == -1) { printf("表为空,查找失败n"); } else if(res == -2) { printf("查找失败,没有该值n"); } //按位置查找返回值 res = listSearchPos(S, 8); if(res >= 0) { printf("查找成功,值为%dn", res); } else if(res == -1) { printf("查找失败,表为空n"); } else if(res == -2) { printf("查找失败,输入位置不合法n"); } //按值修改 listUpdateValue(S, 10, 100); listShow(S); //按位置修改 listUpdatePos(S, 8, 10); listShow(S); //排序 listSort(S); listShow(S); //去重 listUnique(S); listShow(S); //选择排序降序 listChooseSort(S); listShow(S); //释放表 listFree(&S); return 0; }



