顺序表的创建、输入、判空、判满、添加、遍历、删除、冒泡排序、选择排序

按值查找/删除,按位置查找/删除、释放等功能函数,主函数,头文件如下:

头文件:

#ifndef __HEAD_H__
#define __HEAD_H__#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX 20typedef int datatype;typedef struct{;datatype data[MAX];int len;}seqlist;//创建顺序表
seqlist* list_create();
//判空函数
int list_empty(seqlist *S);
//判满函数
int list_full(seqlist *S);
//添加元素
int list_add(seqlist *S,datatype e);
//显示数据
void list_show(seqlist *S);
//任意位置插入
int list_insert(seqlist *S,int pos,datatype e);
//任意位置删除
int list_delete(seqlist*S,int pos);
//按值查找,返回对应的位置
int list_search_value(seqlist *S,datatype e);
//按位置查找,并返回查找成功后的值
datatype list_search_pos(seqlist *S,int pos);
//按值修改
int list_update_value(seqlist *S,datatype old_e,datatype new_e);
//按位置修改
int list_update_pos(seqlist *S,int pos,datatype new_e);
//排序
void list_sort(seqlist *S);
//选择排序
void list_selt_sort(seqlist *S);
//去重
void list_delte_repeat(seqlist *S);
//释放表
void list_free(seqlist **S);
#endif

功能函数(func.c)

#include "head.h"//创建顺序表
seqlist* list_create()
{//在堆区申请一个顺序表空间,将首地址给Sseqlist *S=(seqlist*)malloc(sizeof(seqlist));if(NULL==S){puts("申请空间失败");return NULL;}//将数组和顺序表初始化置零memset(S->data,0,sizeof(S->data));S->len=0;puts("创建成功");return S;
}//判空函数
int list_empty(seqlist *S)
{return S->len==0 ? 1:0;
}
//判满函数
int list_full(seqlist *S)
{return S->len==MAX ? 1:0; //0表示不满,1表示满
}//添加元素
int list_add(seqlist *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 *S)
{if(NULL==S){printf("表不存在\n");return;}if(list_empty(S)){printf("空空如也,遍历个der!\n");return;}printf("目前顺序表的顺序是:");for(int i=0;i<S->len;i++){printf("%d\t",S->data[i]);}printf("\n");
}//任意插入,删除
int list_insert(seqlist *S,int pos,datatype e)
{//判断逻辑if(pos<0 || pos>S->len ||list_full(S)){printf("插入失败!\n");return -1;}//腾空for(int i=S->len-1;i>=pos;i--){S->data[i+1]=S->data[i];}//插入数据S->data[pos]=e;//表的变化printf("插入成功!\n");S->len++;return 0;
}
//任意位置删除
int list_delete(seqlist*S,int pos)
{//判断逻辑if(list_empty(S)){printf("已为空,无法删除!\n");return -1;}if(pos<0 || pos>S->len-1){printf("删除位置不合法!\n");return -2;}//删除数据for(int i=pos;i<S->len;i++){S->data[i]=S->data[i+1];}//表的变化S->len--;printf("删除成功!\n");return 0;
}
//按值查找,返回对应的位置
int list_search_value(seqlist *S,datatype e)
{//判断逻辑if(list_empty(S)){printf("该表为空\n");return -1;}//按值查找for(int i=0;i<S->len;i++){if(e==S->data[i]){printf("查找成功\n");return i;}}printf("查找失败!\n");return -2;}
//按位置查找,并返回查找成功后的值
datatype list_search_pos(seqlist *S,int pos)
{//判断逻辑if(list_empty(S)){printf("该表为空\n");return -1;}if(pos<0 || pos>S->len-1){printf("该位置不合法!\n");return -2;}printf("查找成功\n");return S->data[pos];
}
//按值修改
int list_update_value(seqlist *S,datatype old_e,datatype new_e)
{int pos=-1;pos=list_search_value(S,old_e);if(pos>=0){S->data[pos]=new_e;printf("修改成功\n");return 0;}else{printf("修改失败\n");return -1;}
}
//按位置修改
int list_update_pos(seqlist *S,int pos,datatype new_e)
{//判断逻辑if(pos<0 || pos>S->len-1){printf("该位置不合法!\n");return -1;}//修改对应位置内容S->data[pos]=new_e;printf("修改成功\n");return 0;
}
//冒泡排序
void list_sort(seqlist *S)
{int i,j;datatype temp;for(i=1;i<S->len;i++){for(j=0;j<S->len-i;j++){if(S->data[j] > S->data[j+1]){temp=S->data[j]; S->data[j]=S->data[j+1]; S->data[j+1]=temp;}}}printf("排序成功\n");
}
//选择排序
void list_selt_sort(seqlist *S)
{int i,j,index;datatype temp;for(i=0;i<S->len;i++){datatype max=S->data[i];for(j=i;j<S->len;j++){if(temp<S->data[j]){max=S->data[j];index=j;}}temp=S->data[i];S->data[i]=max;S->data[index]=temp;}return;
}
//去重
void list_delte_repeat(seqlist *S)
{if(S->len<=1){printf("去重失败\n");return;}int index=1;int i,j;for(i=1;i<=S->len-1;i++){for(j=0;j<index;j++){if(S->data[j]==S->data[i]){break;}}if(j==index){S->data[index]=S->data[i];index++;}}S->len=index;
}
//释放表
void list_free(seqlist **S)
{if(NULL!=*S){free(*S);}*S=NULL;printf("释放成功\n");
}

主函数(main.c)

#include "head.h"int main(int argc, const char *argv[])
{//创建顺序表seqlist *S=list_create();if(NULL==S){puts("申请空间失败");return -1;}//顺序插入数据list_add(S,3);list_add(S,4);list_add(S,5);list_add(S,6);list_add(S,7);//显示数据list_show(S);//按照位置插入数据list_insert(S,2,6);list_show(S);//删除数据list_delete(S,2);list_show(S);//按值查找int res1=list_search_value(S,4);if(res1>=0){printf("第%d个位置的数据为%d\n",res1,4);}else if(res1 == -2){printf("查找失败\n");}else if(res1 == -1){printf("该表为空\n");}//按位置查找list_search_pos(S,2);//按值修改//按位置修改list_update_pos(S,2,10);list_show(S);//排序list_sort(S);list_show(S);//list_selt_sort(S);list_show(S);list_delte_repeat(S);list_show(S);list_free(&S);list_show(S); return 0;
}

结果:

数据结构(0719-林雪阵)相关推荐

  1. 瑞典 林雪平大学 机器人视觉方向 博士招生

    关注公众号,获取更多AI领域发展机会 公司介绍 电气工程系(ISY)属于林雪平大学四个学院之一的技术学院,专注于工程教育,涉及到基础和应用知识.研究以工业需求为基础,研究范围从基础研究到合作项目的直接 ...

  2. IO进程线程(0729-林雪阵)

    作业: 请使用目录相关函数以及文件属性相关函数实现:显示指定路径下所有文件属性的功能(除了隐藏文件).类似 ls -l 一个目录 头文件 //头文件#ifndef __HEAD_H__ #define ...

  3. Pandas的数据结构之DataFrame

    DataFrame的简介 DataFrame是一个[表格型]的数据结构,可以看做是[由Series组成的字典](共用一个索引).DataFrame由按一定顺序排列的多列数据组成.设计初衷是将Serie ...

  4. 华为不可参与 IEEE 审稿但可继续提供赞助;谷歌限制 Chrome 接口惹非议;Mozilla 号召用户换火狐 | 开发者周刊...

    CSDN开发者周刊:只为传递"有趣/有用"的开发者内容,欢迎订阅! 本周热门项目 Google限制Chrome接口惹非议,Mozilla号召用户用火狐(下附链接) https:// ...

  5. 【干货】工业软件为什么这么难?

    全文字数 4800 字 阅读时间 11 分钟 文章由知识自动化(zhishipai) 授权转载 工业软件中几乎最难啃的三座大山,就是CAD.CAE和EDA,大山中间还穿插了许多小的丘陵,如CAM.拓扑 ...

  6. 【人工智能】人工智能是中国2025的歧路;人工智能只是智能制造舞台上的“小配角”

    人工智能是中国2025的歧路 在520"我爱你"这饱蘸甜蜜轻喜剧.满街充弥了棉花糖气味的一天,那些严肃的人似乎也变得不着正调了:一家国内知名的软件总裁也高调提出,"每一个 ...

  7. 【数据挖掘】4、关联分析:Apriori、FP-Growth 算法、买面包是否也爱买啤酒

    文章目录 一.概念 1.1 支持度 1.2 置信度 1.3 提升度 二.Apriori 算法 2.1 频繁项集的定义 2.2 手动推导 2.3 SDK 实战 2.3.1 超市购物 2.3.2 挑选演员 ...

  8. 最新组合式模型量化方法,实现FPGA最高硬件利用率,准确率-推理速度达到SOTA...

    作者 | 王言治 来源 | AI科技大本营(ID:rgznai100) 深度神经网络(DNN)在图像.语言处理等领域获得了巨大成功,而如何将这些网络部署在ASIC.FPGA等嵌入式设备仍是热门研究方向 ...

  9. 目标检测一卷到底之后,终于有人为它挖了个新坑|CVPR2021 Oral

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨二玖 审稿|邓富城 报道丨极市平台 导读 本文解决了两个挑战:一是在没有明确监督的情况下,将尚未 ...

最新文章

  1. 强行分类提取特征自编码网络例3
  2. Android中TimePicker时间选择器的使用和获取选择的时和分
  3. prometheus连续查询_Grafana + Prometheus快速搭建监控平台
  4. 【一步解决】eclipse jee左边的项目栏不见了
  5. Java网络编程3---Socket-UDP编程
  6. h5 bootstrap 小程序模板_软件测试人员必知H5/小程序测试点
  7. formdata上传文件_关于multipart/formdata上传文件
  8. 利用LDA主题模型的生成过程仿真数据
  9. springboot细节挖掘(集成ElasticSearch)
  10. python连oracle数据库参数变量_带绑定字符串变量的Python cx_Oracle SQL
  11. Maven仓库—Nexus环境搭建及使用
  12. [codeup 1126]看电视
  13. 使得电脑成为通用计算机器,为什么电脑显示器变成通用非即插即用监视器?
  14. python docx 图片_python-docx设置图片大小和对齐方式
  15. BZOJ3505 CQOI2014数三角形(组合数学)
  16. 科学家要用3D打印技术复制大脑,今后人类都可以“永生”了
  17. 我学设计模式 之 原型模型模式
  18. 使用NVivo研究时,不得不注意的几点!
  19. 利用js写的见缝插针小游戏
  20. gow在windows上使用的linux shell命令,Windows模拟linux终端工具Cmder+Gow

热门文章

  1. b站小姐姐词云视频制作学习记录
  2. vue安装教程(遇到的坑详解)
  3. 一文学会CentOS 文件常用命令
  4. Tcp/Udp端口对照表
  5. AOSP 源代码标记和 build
  6. Office系列---将Office文件(Word、PPT、Excel)转换为PDF文件,提取Office文件(Word、PPT)中的所有图片
  7. 如何运行PION/ION(分布式流媒体系统)
  8. 【pion】ice-single-port解析
  9. cm11修改wifi_mac地址
  10. ligerui demo php,LigerUI的简单使用示例