作业:
1> 思维导图
2> 将没有完成的功能,全部完成
3> 将顺序表的源代码重新写一遍,可以参照着头文件写,测试文件自己写
头文件
/*******************************************************/ //=> File Name: seqlist.h //=> Author: Water //=> Mail: 1249496568@qq.com //=> Created Time: 2024年11月27日 星期三 15时06分59秒 /*******************************************************/#ifndef SEQLIST_H #define SEQLIST_H#define MAX 100 typedef int datatype;//定义顺序表类型 typedef struct Seqlist {datatype data[MAX];int len; }Seqlist,* Seqlist_ptr;//创建顺序表 Seqlist_ptr list_create();//判断顺序表是否为空 int list_empty(Seqlist_ptr S); //判断顺序表是否为满 int list_full(Seqlist_ptr S);//向顺序表中添加元素 int list_add(Seqlist_ptr S,datatype e); //查看顺序表内容函数 void list_show(Seqlist_ptr S); //向顺序表中任意位置插入元素 int list_insert_pos(Seqlist_ptr S,int pos,datatype e); //向顺序表中任意位置删除元素 int list_del_pos(Seqlist_ptr S,int pos); //顺序表按值查找返回元素下标 int list_search_value(Seqlist_ptr S,datatype e); //顺序表按位置查找返回值 int list_search_pos(Seqlist_ptr S,int pos); //顺序表按位置修改元素 int list_update_pos(Seqlist_ptr S,int pos,datatype new_e); //顺序表按值修改值 int list_update_value(Seqlist_ptr S,datatype ole_e,datatype new_e); //顺序表排序 int list_sort(Seqlist_ptr S); //顺序表去重 int list_unique(Seqlist_ptr S); //顺序表翻转 int list_reverse(Seqlist_ptr S); //获取顺序表长度 int list_len(Seqlist_ptr S); //清空数组 int list_clear(Seqlist_ptr S); //销毁顺序表 void list_destory(Seqlist_ptr S); #endif
源文件
/*******************************************************/ //=> File Name: seqlist.c //=> Author: Water //=> Mail: 1249496568@qq.com //=> Created Time: 2024年11月27日 星期三 15时06分59秒 /*******************************************************/#include<myhead.h> #include"seqlist.h" //创建顺序表的定义 Seqlist_ptr list_create() {//在堆区申请一个顺序表Seqlist_ptr S = (Seqlist_ptr)malloc(sizeof(Seqlist));if(NULL == S){printf("创建顺序表失败\n");return NULL;}//给顺序表进行初始化bzero(S->data,sizeof(datatype)*MAX); //初始化数组S->len = 0;printf("顺序表创建成功\n");return S; }//判断顺序表是否为空 int list_empty(Seqlist_ptr S) {//判断传入的顺序表是否合法if(NULL == S){printf("非法顺序表\n");return 0;}//判断顺序表长度return 0 == S->len; }//判断顺序表是否为满 int list_full(Seqlist_ptr S) {//判断传入的顺序表是否合法if(NULL == S){printf("非法顺序表\n");return 1;}//判断顺序表长度是否为最大长度return MAX == S->len; } //向顺序表中添加元素 int list_add(Seqlist_ptr S,datatype e) {//判断传入的顺序表是否合法if(list_full(S)){printf("顺序表已满,添加失败\n");return -1;}//添加逻辑S->data[S->len] = e;//表长变化S->len++;printf("添加成功\n");\return 0; } //查看顺序表内容函数 void list_show(Seqlist_ptr S) {//判空if(list_empty(S) || S == NULL){printf("顺序表为空,查看失败\n");return;}//遍历整个顺序表printf("顺序表中各元素分别为:\n");for(int i=0;i<S->len;i++){printf("%d\t",S->data[i]);}printf("\n"); } //向顺序表中任意位置插入元素 int list_insert_pos(Seqlist_ptr S,int pos,datatype e) {//判满,判断位置是否合法if(list_full(S) || pos < 0 || pos > S->len){printf("插入失败\n");return -1;}S->len++;for(int i=S->len-1;i>=pos;i--){S->data[i+1] = S->data[i];}S->data[pos] = e;printf("插入成功\n");return 0; } //向顺序表中任意位置删除元素 int list_del_pos(Seqlist_ptr S,int pos) {//判空,判断位置是否合法if(list_empty(S) || pos <0 || pos > S->len){printf("删除失败\n");return -1;}for(int i=pos;i<S->len-1;i++){S->data[i] = S->data[i+1];}S->len--;printf("删除成功\n");return 0; } //顺序表按值查找返回元素下标 int list_search_value(Seqlist_ptr S,datatype e) {//判断if(list_empty(S)){printf("顺序表为空,查找失败\n");return -1;}for(int i=0;i<S->len;i++){if(S->data[i] == e){return i;}}printf("查找失败\n");return -1; } //顺序表按位置查找返回值 int list_search_pos(Seqlist_ptr S,int pos) {//判空if(list_empty(S)){printf("顺序表为空,查找失败\n");return -1;}for(int i=0;i<S->len;i++){if(i == pos){return S->data[i];}}printf("查找失败\n");return -1; } //顺序表按位置修改元素 int list_update_pos(Seqlist_ptr S,int pos,datatype new_e) {//判空if(list_empty(S)){printf("顺序表为空,修改失败\n");return -1;}int res = list_search_pos(S,pos);if(res == -1){printf("更新失败\n");}S->data[res] = new_e;printf("修改成功\n");return 0; } //顺序表按值修改值 int list_update_value(Seqlist_ptr S,datatype ole_e,datatype new_e) {//判空if(list_empty(S)){printf("顺序表为空,修改失败\n");return -1;}int res = list_search_value(S,ole_e);if(res == -1){printf("更新失败\n");}S->data[res] = new_e;printf("修改成功\n");return 0; } //顺序表排序 int list_sort(Seqlist_ptr S) {//判空if(list_empty(S) || S->len == 1){printf("排序失败\n");return -1;}for(int i=1;i<S->len;i++){for(int j=0;j<S->len-i;j++){if(S->data[j] > S->data[j+1]){int temp = S->data[j];S->data[j] = S->data[j+1];S->data[j+1] = temp;}}}printf("排序成功\n");return 0; } //顺序表去重 int list_unique(Seqlist_ptr S) {//判空if(list_empty(S) || S->len == 1){printf("去重失败\n");return -1;}for(int i=0;i<S->len;i++){for(int j=i+1;j<S->len;j++){if(S->data[i] == S->data[j]){list_del_pos(S,j);j--;}}}printf("去重成功\n");return 0; } //顺序表翻转 int list_reverse(Seqlist_ptr S) {//判空if(list_empty(S) || S->len == 1){printf("翻转失败\n");return -1;}for(int i=0;i<S->len/2;i++){int temp = S->data[i];S->data[i] = S->data[S->len-1-i];S->data[S->len-1-i] = temp;}printf("翻转成功\n");return 0; } //获取顺序表长度 int list_len(Seqlist_ptr S) {printf("顺序表的长度为:%d\n",S->len);return S->len; } //清空数组 int list_clear(Seqlist_ptr S) {S->len = 0;printf("顺序表清空成功\n");return 0; } //销毁顺序表 void list_destory(Seqlist_ptr S) {if(NULL != S){free(S);S = NULL;}printf("顺序表销毁成功\n"); }
测试主函数
/*******************************************************/ //=> File Name: main.c //=> Author: Water //=> Mail: 1249496568@qq.com //=> Created Time: 2024年11月27日 星期三 15时06分59秒 /*******************************************************/#include<myhead.h> #include"seqlist.h" int main(int argc, const char *argv[]) {//定义一个顺序表指针,调用创建函数Seqlist_ptr S = list_create();if(NULL == S){return -1;}//顺序表后续操作//调用添加数据操作list_add(S,3);list_add(S,8);list_add(S,2);list_add(S,4);//调用查看顺序表内容函数list_show(S);list_insert_pos(S,1,520);list_show(S);list_insert_pos(S,1,1314);list_show(S);list_del_pos(S,1);list_show(S);list_del_pos(S,2);list_show(S);list_add(S,3);list_add(S,8);list_add(S,2);list_add(S,4);list_show(S);list_update_value(S,520,1314);list_show(S);list_add(S,3);list_add(S,8);list_add(S,2);list_add(S,4);list_show(S);list_sort(S);list_show(S); list_reverse(S);list_show(S);list_len(S);list_unique(S);list_show(S);list_clear(S);list_show(S);list_destory(S);list_show(S);return 0; }