欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 2024.11.28(作业)

2024.11.28(作业)

2024/11/30 8:42:08 来源:https://blog.csdn.net/CGS200213cgs/article/details/144118911  浏览:    关键词:2024.11.28(作业)

思维导图

功能函数声明文件

#ifndef _FUN_H__
#define _FUN_H__
#include <myhead.h>#define MAX 50 		//数组大小
#define QAZ 20      //长度和字符串大小typedef int datatype; //数据元素类型//2.1  定义顺序表类型
typedef struct
{datatype data[MAX];int len;
}SeqList,*SeqList_ptr;//2.2  创建顺序表
SeqList_ptr list_create();//2.3  判断顺序表是否为空
int list_empty(SeqList_ptr S);//2.4  判断顺序表是否满了
int list_full(SeqList_ptr S);//2.5  向顺序表中添加元素
int list_add(SeqList_ptr S,datatype e);//2.6  查看顺序表内容函数
void list_show(SeqList_ptr S);//2.7  顺序表按任意位置进行插入操作
int list_insert_pos(SeqList_ptr S,int pos,datatype e);//2.8  顺序表按位置进行删除
int list_delete_pos(SeqList_ptr S,int pos);//2.9  顺序表按值查找
int list_search_value(SeqList_ptr S,datatype e);//2.10 顺序表按位置查找返回元素值
int List_search_position(SeqList_ptr S,int pos);//2.11 顺序表按位置进行修改元素
int list_update_position(SeqList_ptr S,int pos,datatype e);//2.12 顺序表按值进行修改
int list_update_value(SeqList_ptr S,datatype old_e,datatype new_e);//2.13 顺序表排序
int list_sort(SeqList_ptr S);//2.14 顺序表去重操作
int list_unique(SeqList_ptr S);//2.15 顺序表翻转
int list_flip(SeqList_ptr S);//2.16 获取顺序表的长度
int list_long(SeqList_ptr S);//2.17 清空数组
int list_clear(SeqList_ptr S);//2.18 销毁顺序表
int list_destroy(SeqList_ptr S);#endif

功能函数

#include "fun.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 ? 1:0;}//判断顺序表是否满了
int list_full(SeqList_ptr S)
{//判断传入的顺序表是否合法if(NULL==S){printf("非法顺序表\n");return 1;      //后续不能操作}//判断顺序表长度是否为最大长度return S->len == MAX ? 1:0;
}
//向顺序表中添加元素
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)){printf("查看失败\n");return ;}//遍历整个顺序表printf("当前顺序表中数据分别是:");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(pos > S->len||pos<0){printf("该位置不可插入\n");return -1;}//腾空逻辑for(int i=S->len-1;i>=pos;i--){S->data[i+1] = S->data[i];}//将数据放入顺序表S->data[pos] = e;//表长变化S->len++;printf("插入成功\n");
}//顺序表按位置进行删除
int list_delete_pos(SeqList_ptr S,int pos)
{//判断逻辑if(list_empty(S)||pos > S->len||pos<0){printf("该位置不可删除\n");return -1;}//删除逻辑for(int i=pos+1;i<S->len;i++){S->data[i-1] = S->data[i];}//表长变化S->len--;printf("删除成功\n");}//顺序表按值查找
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; 		//表示没找到//表长变化
}//2.10 顺序表按位置查找返回元素值
int List_search_position(SeqList_ptr S,int pos)
{//判断逻辑if(pos<0||pos>S->len){printf("查找失败\n");return -1;}//运行逻辑printf("查找成功\n");return S->data[pos];}//2.11 顺序表按位置进行修改元素
int list_update_position(SeqList_ptr S,int pos,datatype e)
{//判断逻辑if(list_empty(S)||pos<0||pos>S->len){printf("修改失败\n");return -1;}//运行逻辑S->data[pos] = e;printf("修改成功\n");return 0;
}//顺序表按值进行修改
int list_update_value(SeqList_ptr S,datatype old_e,datatype new_e)
{//判断逻辑//通过旧值查找旧值的位置//程序执行至此,res表示就是要修改的值的位置//顺序表按值进行修改//判断逻辑if(list_empty(S)){printf("修改失败\n");return -1;}//通过旧值查找旧值的位置int res = list_search_value(S, old_e);if(res == -1){printf("更新失败\n");return -1;}//程序执行 至此,res表示的就是要修改的值的下标S->data[res] = new_e;printf("修改成功\n");return 0;}//2.13 顺序表排序
int list_sort(SeqList_ptr S)
{//判断逻辑if(list_empty(S)){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]){datatype temp = S->data[j];S->data[j] = S->data[j+1];S->data[j+1] = temp;}}}printf("修改成功\n");}//顺序表去重操作
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++)  	//遍历所有的元素{//找到任意元素S->data[i]for(int j=i+1;j<S->len;j++){if(S->data[i] == S->data[j]){//说明有重复元素list_delete_pos(S,j);j--; 		//防止漏网之雨}}}printf("去重成功\n");return 0;
}//2.15 顺序表翻转
int list_flip(SeqList_ptr S)
{//判断逻辑if(list_empty(S) || S->len == 1){printf("翻转失败\n");return -1;}//翻转逻辑for(int i=0;i<S->len/2;i++){datatype temp = S->data[i];S->data[i] = S->data[S->len-1-i];S->data[S->len-1-i] = temp;}printf("翻转失败\n");return 0;
}//2.16 获取顺序表的长度
int list_long(SeqList_ptr S)
{return S->len;
}//2.17 清空数组
int list_clear(SeqList_ptr S)
{bzero(S->data,sizeof(datatype)*MAX); 	//初始化数组S->len = 0;return -1;
}//2.18 销毁顺序表
int list_destroy(SeqList_ptr S)
{if(NULL == S){free(S);S = NULL;}printf("销毁成功\n");return 0;
}

主函数文件

#include "fun.h"
#include <myhead.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,7);list_add(S,2);list_add(S,5);//调用遍历函数list_show(S);//顺序表按任意位置进行插入操作list_insert_pos(S,2,89);list_show(S);//顺序表按位置进行删除list_delete_pos(S,2);list_show(S);//添加元素list_add(S,666);list_add(S,666);list_add(S,666);list_add(S,666);//去重list_unique(S);list_show(S);//排序list_sort(S);list_show(S);//翻转list_flip(S);list_show(S);//清空数组list_clear(S);//销毁list_destroy(S);return 0;
}

版权声明:

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

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