> 技术文档 > 7.22数据结构——顺序表

7.22数据结构——顺序表


文章目录

  • 一、思维导图
  • 二、实现顺序表的功能代码
    • head.h
    • test.c
    • main.c

一、思维导图

在这里插入图片描述

二、实现顺序表的功能代码

head.h

#ifndef __HEAD_H__#define __HEAD_H__#include #include #include //数组的最大长度#define MAXSIZE 5enum type{FALUSE=-1,//用于失败返回的SUCCESS//用于成功返回的};//给数据元素的类型起别名typedef int datatype;//定义顺序表的结构体//typedef struct sqlist{//数据元素datatype data[MAXSIZE];//顺序表长度:实际的元素个数 int len;}*sqlist;//创建顺序表sqlist create_sqlist();//尾部插入int insert_rear(sqlist list,datatype element);//循环输出int output(sqlist list);//尾删int delate_rear(sqlist list);//按下标查找int search_index(sqlist list,datatype index);//按下标删除int delate_index(sqlist list,datatype index);//按下标修改int change_index(sqlist list,int index,int element);//按下标插入int insert_index(sqlist list,int index,int element);//去重int de_weight(sqlist list);//顺序表排序int sort(sqlist list);//按元素查找int search_yuansu(sqlist list,int number);//按元素删除int delate_yuansu(sqlist list,int number);//按元素修改int change_yuansu(sqlist list,int number,int element);#endif

test.c

#include \"head.h\"//顺序表内存申请sqlist create_sqlist(){sqlist list=(sqlist)malloc(sizeof(struct sqlist));if(NULL==list){return NULL;}//堆区内存申请成功//对数据元素清0bzero(list->data,sizeof(list->data));//对顺序表长度清0list->len=0;//返回顺序表return list;}//顺序表尾部插入int insert_rear(sqlist list,datatype element){//1.判断顺序表是否为满//2.判断顺序表是否为NULLif(NULL==list||list->len==MAXSIZE){printf(\"sqlist full..\\n\");return FALUSE;}//3.在顺序表尾部插入list->data[list->len]=element;list->len++;return SUCCESS;}//循环打印顺序表int output(sqlist list){//1.判断顺序表是否为空//2.判断顺序表是否为NULLif(list==NULL||list->len==0){printf(\"output error...\\n\");return FALUSE;}//循环输出for(int i=0;i<list->len;i++){printf(\"%d\\t\",list->data[i]);}putchar(10);}//尾删int delate_rear(sqlist list){//判断顺序表是否为空//判断顺序表是否为NULLif(list==NULL||list->len==0){printf(\"delate_rear error..\\n\");return FALUSE;}//删除list->len--;return SUCCESS;}//按下标查找int search_index(sqlist list,datatype index){//判断顺序表是否为空//判断顺序表是否为NULLif(list==NULL||list->len==0||index<0||index>=list->len){printf(\"search_index error...\\n\");return FALUSE;}//输出查找的值printf(\"%d\\n\",list->data[index]);return SUCCESS;}//按下标删除int delate_index(sqlist list,datatype index){//判断顺序表是否为空//判断顺序表是否为NULL//判断是否在顺序表空间内if(list==NULL||list->len==0||index<0||index>=list->len){printf(\"delate_index error...\\n\");return FALUSE;}for(int i=index;i<list->len;i++){list->data[i]=list->data[i+1];}list->len--;return SUCCESS;}//按下标修改int change_index(sqlist list,int index,int element){//判断顺序表是否为空//判断顺序表是否为NULL//判断是否在顺序表空间内if(list==NULL||list->len==0||index<0||index>=list->len){printf(\"change_index error...\\n\");return FALUSE;}list->data[index]=element;return SUCCESS;}//按下标插入int insert_index(sqlist list,int index,int element){//判断顺序表是否为NULL//判断是否在顺序表空间内if(list==NULL||index<0||index>list->len){printf(\"insert_index error...\\n\");return FALUSE;}if(list->len==MAXSIZE){printf(\"内存已满无法插入\\n\");return FALUSE;}list->len++;for(int i=list->len;i>index;i--){list->data[i-1]=list->data[i-2];}list->data[index]=element;return SUCCESS;}//去重int de_weight(sqlist list){//判断顺序表是否为空//判断顺序表是否为NULLif(list==NULL||list->len==0){printf(\"de_weight error..\\n\");return FALUSE;}for(int i=0;i<list->len;i++){for(int j=i+1;j<list->len;j++){if(list->data[i]==list->data[j]){delate_index(list,j);j--;}}}return SUCCESS;}//顺序表排序int sort(sqlist list){//判断顺序表是否为空//判断顺序表是否为NULLif(list==NULL||list->len==0){printf(\"sort error..\\n\");return FALUSE;}for(int i=0;i<list->len-1;i++){for(int j=0;j<list->len-i-1;j++){if(list->data[j]>list->data[j+1]){int temp=list->data[j];list->data[j]=list->data[j+1];list->data[j+1]=temp;}}}return SUCCESS;}//按元素查找int search_yuansu(sqlist list,int number){//判断顺序表是否为空//判断顺序表是否为NULLif(list==NULL||list->len==0){printf(\"sort error..\\n\");return FALUSE;}for(int index=0;index<list->len;index++){if(list->data[index]==number){return index;}}return FALUSE;}//按元素删除int delate_yuansu(sqlist list,int number){//判断顺序表是否为空//判断顺序表是否为NULLif(list==NULL||list->len==0){printf(\"delate_yuansu error..\\n\");return FALUSE;}int index=search_yuansu(list,number);delate_index(list,index);return SUCCESS;}//按元素修改int change_yuansu(sqlist list,int number,int element){//判断顺序表是否为空//判断顺序表是否为NULLif(list==NULL||list->len==0){printf(\"change_yuansu error..\\n\");return FALUSE;}int index=search_yuansu(list,number);change_index(list,index,element);return SUCCESS;}

main.c

#include \"head.h\"int main(int argc, const char *argv[]){//1.定义一个顺序表sqlist list=create_sqlist();datatype element;//2.顺序表尾部插入for(int i=0;i<MAXSIZE;i++){printf(\"请输入一个值:\");scanf(\"%d\",&element);insert_rear(list,element);}//3.循环打印顺序表 output(list);//4.尾部删除delate_rear(list);delate_rear(list);printf(\"尾删之后;\");output(list);//5.按下标查找int index;printf(\"输入要查找的下标的值:\");scanf(\"%d\",&index);search_index(list,index);//6.按下标修改printf(\"输入要修改的下标:\");scanf(\"%d\",&index);printf(\"输入要改成的值:\");scanf(\"%d\",&element);change_index(list,index,element);output(list);//7.按下标删除printf(\"输入要删除值的下标:\");scanf(\"%d\",&index);delate_index(list,index);output(list);//8.按下标插入printf(\"输入要插入值的下标:\");scanf(\"%d\",&index);printf(\"输入要插入的值:\");scanf(\"%d\",&element);insert_index(list,index,element);//9.去重0de_weight(list);printf(\"去重后的结果:\");output(list);//10.顺序表排序sort(list);printf(\"顺序表排序后的结果:\");output(list);//11.按元素查找index=search_yuansu(list,14);printf(\"元素查找的下标:\");printf(\"%d\\n\",index);//12.按元素删除delate_yuansu(list,14);printf(\"按元素删除后的结果:\");output(list);//13.按元素修改change_yuansu(list,14,54);printf(\"按元素修改后的结果:\");output(list);//14.顺序表释放内存free(list);list=NULL;return 0;}

软件下载大全