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 listAdd(seqList *S,datatype e);
//判满
int listFull(seqList *S);
//判空
int listEmpty(seqList *S);
//遍历
void listShow(seqList *S);
//插入
int listInsertPos(seqList *S,int pos,datatype e);
//删除
int listDeletePos(seqList *S,int pos);
//按值查找
int listSearchVaule(seqList *S,datatype e);
//按位置查找
datatype listSearchPos(seqList *S,int pos);
//按值修改
int listUpdateVaule(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);
#endif
2、seqlist.c
#include "seqlist.h" #include#include #include seqList* listCreate() { seqList *S=(seqList *)malloc(sizeof(seqList)); if(S == NULL) { printf("申请空间失败!n"); return NULL; } memset(S->data,0,sizeof(S->data)); //将数组清零 S->len=0; printf("创建成功n"); return S; } //判空 int listEmpty(seqList *S) { if(S == NULL) { 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]); } putchar(10); } //插入 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"); return 0; } //删除 int listDeletePos(seqList *S,int pos) { if(pos <0 || pos >S->len-1) { printf("位置不合法n"); return -2; } //删除数据 for(int i=pos+1;i len;i++) { S->data[i-1]=S->data[i]; } //表的变化 S->len--; printf("删除成功n"); return 0; } //按值查找,返回对应位置 int listSearchVaule(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)) { printf("表空n"); return -1; } if(pos <0 || pos >S->len-1) { printf("位置不合法n"); return -2; }else{ return S->data[pos]; } } //按值修改 int listUpdateVaule(seqList *S,datatype old_e,datatype new_e) { for(int i=0;i len;i++) { if(S->data[i] == old_e) { S->data[i]=new_e; return 0; } } return -2; } //按位置修改 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; } //排序 void listSort(seqList *S) { int i,j; datatype temp; for(i=0;i len-1;i++) { for(j=0;j len-i-1;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; } } } for(i=0;i len;i++) { printf("%dt",S->data[i]); } putchar(10); } //去重 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(S != NULL) { free(S); } S == NULL; //防止野指针 printf("释放成功n"); }
3、main.c
#include "seqlist.h" #include#include int main(int argc, const char *argv[]) { int res1,res2,res3; seqList *S=listCreate(); if(S ==NULL) { return -1; } //手动输入一堆数据 listAdd(S,7); listAdd(S,2); listAdd(S,5); listAdd(S,12); listAdd(S,9); listAdd(S,6); listAdd(S,6); listAdd(S,6); listShow(S); listInsertPos(S,2,8); listShow(S); listDeletePos(S,2); listShow(S); //按值查找 res1=listSearchVaule(S,12); if(res1 == -2) { printf("查找失败n"); }else if(res1 == -1){ printf("表空n"); }else{ printf("查找成功,在第%d个位置!n",res1+1); } //按位置查找 res2=listSearchPos(S,4); if(res2 == -2) { printf("查找失败n"); }else if(res2 == -1){ printf("表空n"); }else{ printf("查找成功,这个位置上的值为:%dn",res2); } //按位置修改 listUpdatePos(S,2,100); listShow(S); //按值修改 res3=listUpdateVaule(S,9,55); if(res3 == -2) { printf("值不存在n"); } listShow(S); //去重 listDeleteRepeat(S); //排序 printf("进行排序后结果为:n"); listSort(S); //释放表 listFree(S); S=NULL; listShow(S);
执行结果:



