西安网站建设熊掌,云尚网络建站,档案网站建设与档案信息化,做网站功能一、完整功能【顺序表】的创建
【seqList.h】
#ifndef __SEQLIST_H__
#define __SEQLIST_H__#include stdio.h
#include string.h
#include stdlib.h//宏定义#xff0c;线性表的最大容量
#define MAX 30//类型重定义#xff0c;表示要存放数据的类…一、完整功能【顺序表】的创建
【seqList.h】
#ifndef __SEQLIST_H__
#define __SEQLIST_H__#include stdio.h
#include string.h
#include stdlib.h//宏定义线性表的最大容量
#define MAX 30//类型重定义表示要存放数据的类型
typedef int DataType;//定义顺序表的结构体类型
typedef struct sequence
{//定义一个数组存放连续的数据DataType data[MAX];//顺序表长度已存放的元素个数int len;
}seqList, *seqListPtr;//创建一个顺序表
seqListPtr seq_create();//判空
int empty(seqListPtr S);//判满
int fill(seqListPtr S);//顺序表增加
int seq_add(seqListPtr S, DataType e);//顺序的遍历
void show(seqListPtr S);//任意位置插入数据
int index_add(seqListPtr S, int index, DataType e);//任意位置删除数据
int index_del(seqListPtr S, int index);//通过位置修改数据
void index_change(seqListPtr S, int index, DataType e);//按值查找返回下标
int value_index(seqListPtr S, DataType e);//去重
void repeat(seqListPtr S);//销毁
void my_free(seqListPtr *S);#endif 【seqList.c】
#include seqList.h//创建一个顺序表
seqListPtr seq_create()
{//在堆区申请顺序表的大小空间返回主程序使用seqListPtr S (seqListPtr)malloc(sizeof(seqList));//判断申请空间是否合法if(NULL S){printf(创建失败\n);return NULL;}printf(创建成功\n);//顺序表的长度置为0S-len 0;//数组清空memset(S-data, 0, sizeof(S-data));return S;
}int empty(seqListPtr S)
{//判断所接受的顺序表是否合法if(NULL S){printf(判空失败\n);return -1;}return S-len0;
}int fill(seqListPtr S)
{//判断所接受的顺序表是否合法if(NULL S){printf(判满失败\n);return -1;}return S-len MAX;
}int seq_add(seqListPtr S, DataType e)
{//判断所接受的顺序表是否合法//判满if(NULL S || fill(S)){printf(增加失败\n);return 0;}//放入数据S-data[S-len] e;//增加成功 顺序表长度自增S-len;return 1;
}void show(seqListPtr S)
{//判读所接受的顺序表是否合法//判空if(NULL S || empty(S)){printf(遍历失败\n);return;}for(int i0; iS-len; i){printf(%d , S-data[i]);}printf(\n);
}//任意位置插入数据
int index_add(seqListPtr S, int index, DataType e)
{//判断所接受的顺序表是否合法//判满//判断插入的位置是否合理if(NULL S || fill(S) || index0 || index S-len1){printf(插入失败\n);return 0;}//插入位置对应下标index index - 1;//腾位for(int i0; iS-len-index; i){S-data[S-len-i] S-data[S-len-1-i];}//插入数据S-data[index] e;//顺序表长度自增S-len;return 1;
}//任意位置删除数据
int index_del(seqListPtr S, int index)
{//判断所接受的顺序表是否合法//判空//判断删除的位置是否合理if(NULL S || empty(S) || index0 || indexS-len){printf(删除失败\n);return 0;}//删除从前往后//位置对应的下标index index -1;for(int iindex; iS-len; i){S-data[i] S-data[i1];}//顺序表长度自减S-len--;return 1;
}//通过位置修改数据
void index_change(seqListPtr S, int index, DataType e)
{//判断所接受的顺序表是否合法//判空//判断要修改的位置是否合理//判断新值和旧值是否相等if(NULLS || empty(S) || index0 || indexS-len || S-data[index-1]e){printf(修改失败\n);return;}//修改(index是用户指定的位置但计算机下标是从0开始)S-data[index-1]e;
}//按值查找返回下标
int value_index(seqListPtr S, DataType e)
{//判断所接受的顺序表是否合法//判空if(NULLS || empty(S)){printf(查找失败\n);return -1;}for(int i0; iS-len; i){if(S-data[i]e){return i;}}printf(查无此数据\n);return -1;
}//去重
void repeat(seqListPtr S)
{if(NULLS || S-len1){printf(去重失败\n);return;}//顺序表中的每个元素for(int i0; iS-len; i){//遍历i元素下面所有的元素for(int ji1; jS-len; j){if(S-data[i]S-data[j]){index_del(S, j1); //按位置删除需要注意完全删除j--;}}}
}//销毁
void my_free(seqListPtr *S)
{//判断所接受的顺序表是否合法if(NULL*S){printf(销毁失败\n);return;}free(*S);SNULL;printf(销毁成功\n);
} 【main.c】
#include seqList.hint main()
{//创建一个顺序表seqListPtr S seq_create();//顺序表的增加seq_add(S, 10);seq_add(S, 20);seq_add(S, 30);seq_add(S, 40);seq_add(S, 50);//顺序表的遍历show(S);//任意位置插入数据index_add(S, 3, 3344);show(S);//非法插入测试index_add(S, 0, 3300);//任意位置删除数据index_del(S, 2);show(S);//非法删除测试index_del(S, 8);//通过位置修改数据index_change(S, 4, 9988);show(S);//按值查找返回下标int index value_index(S, 9988);index_change(S, index1, 88099);show(S);//去重//先添加一些测试数据seq_add(S, 10);seq_add(S, 20);seq_add(S, 10);seq_add(S, 10);seq_add(S, 30);seq_add(S, 20);seq_add(S, 20);seq_add(S, 50);seq_add(S, 40);seq_add(S, 50);show(S);repeat(S);show(S);//销毁my_free(S);SNULL;return 0;
} 【执行结果】