欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 第二章:顺序表(一)

第二章:顺序表(一)

2025/2/22 2:16:07 来源:https://blog.csdn.net/qq_51349750/article/details/144116634  浏览:    关键词:第二章:顺序表(一)

作业:

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;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词