//选择排序(作业)
void list_select_sort(seqlist *S);//按位置查找,输出数据(作业)
void list_search_pos(seqlist *S, int pos);//按值修改(作业)
int list_update_value(seqlist *S, datatype old_e, datatype new_e);

头文件

#ifndef __SEQLIST_H__
#define __SEQLIST_H__#define MAX 20
typedef 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_display(seqlist *S);void list_insert_pos(seqlist *S, int e, int pos);void list_delete_pos(seqlist *S, int pos);int list_search_value(seqlist *S, int e);int list_update_pos(seqlist *S, int pos, datatype e);// 冒泡排序
void list_bubble_sort(seqlist *S);// 去重函数
int list_unique(seqlist *S);//选择排序(作业)
void list_select_sort(seqlist *S);//按位置查找,输出数据(作业)
void list_search_pos(seqlist *S, int pos);//按值修改(作业)
int list_update_value(seqlist *S, datatype old_e, datatype new_e);// 销毁表
void list_free(seqlist *S);#endif

源代码

​
#include<stdio.h>
#include<stdlib.h>
#include"seqlist.h"seqlist *list_create()
{seqlist *S = (seqlist *)malloc(sizeof(seqlist));if(NULL == S){printf("创建失败\n");return NULL;}S->len = 0; // 未使用printf("创建成功\n");return S;
}int list_empty(seqlist *S) // 注意 S 的大小写
{return S->len == 0? 1: 0;
}int list_full(seqlist *S)
{return S->len == MAX? 1: 0;
}int list_add(seqlist *S, datatype e)
{if(NULL == S || list_full(S)) // 为空指针时操作不合法{printf("添加失败\n");return -1; // 返回 -1 做判断}S->data[S->len] = e;S->len++; // 结构体 seqlist 成员中的 len++printf("添加成功\n");return 0;
}void list_display(seqlist *S)
{if(NULL == S || list_empty(S)){printf("展示失败\n");return; // 直接退出结束该函数}printf("当前线性表的元素为:");for(int i = 0; i < S->len; i++){printf("%d\t",S->data[i]);}putchar(10);
}void list_insert_pos(seqlist *S, int e, int pos)
{if(NULL == S || list_full(S) || pos < 0 || pos > S->len){printf("插入失败\n");return;}for(int i = S->len-1; i >= pos; i--) // pos 是下标{S->data[i+1] = S->data[i];}S->data[pos] = e;S->len++;printf("插入成功\n");
}void list_delete_pos(seqlist *S, int pos)
{if(NULL==S || list_empty(S) || pos >= S->len || pos<0){printf("删除失败\n");return;}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 *S, int e)
{if(NULL==S || list_empty(S)){return -1;}for(int i = 0; i < S->len; i++){if(e == S->data[i]){printf("跟数组中第%d个元素相同\n",i+1);}}return 0;
}int list_update_pos(seqlist *S, int pos, datatype e)
{if(NULL == S || list_empty(S) || pos<0 || pos>=S->len){printf("更新失败\n");return -1;}S->data[pos] = e;printf("更新成功\n");return 0;
}void list_bubble_sort(seqlist *S)
{if(NULL == S || list_empty(S)){printf("排序失败\n");return;}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 t = S->data[j];S->data[j] = S->data[j+1];S->data[j+1] = t;}}}printf("排序成功\n");
}int list_unique(seqlist *S)
{if(NULL == 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_delete_pos(S, j); // 调用的函数已经 S->len--j--; // 防止漏删//    S->len--;}}}printf("去重成功\n");return 0;
}void list_free(seqlist *S)
{if(NULL != S){free(S);S = NULL;printf("释放成功\n");}
}//选择排序(作业)
void list_select_sort(seqlist *S)
{if(NULL==S || list_empty(S)){printf("排序失败\n"); }for(int i = 1; i < S->len; i++) // 排序的轮数{int max = i-1; // 假设每轮比较的最大元素是第一个for(int j = i-1; j < S->len; j++) // 与max比较的元素个数{if(S->data[max]<S->data[j]){max = j;}}datatype t = S->data[max];S->data[max] = S->data[i-1];S->data[i-1] = t;}printf("排序成功\n");
}//按位置查找,输出数据(作业)
void list_search_pos(seqlist *S, int pos)
{if(NULL==S || pos < 0 || pos >= S->len){printf("查找失败\n");    }printf("下标为%d的数据为:%d\n",pos,S->data[pos]);}//按值修改(作业)
int list_update_value(seqlist *S, datatype old_e, datatype new_e)
{if(NULL==S || list_empty(S)){printf("修改失败\n"); return -1;}for(int i=0; i<S->len; i++){if(old_e == S->data[i]){S->data[i] = new_e;}else{printf("修改失败\n");return -2;}}printf("修改成功\n");return 0;
}​

主函数测试(只测试了作业部分:选择排序、按位置查找输出、按值修改)

#include <stdio.h>
#include"seqlist.h"
int main(int argc, const char *argv[])
{seqlist *S = list_create();if(NULL == S){return -1;}list_add(S, 3);list_add(S, 7);list_add(S, 1);list_add(S, 1);list_display(S);list_select_sort(S);list_display(S);list_search_pos(S, 1);list_display(S);list_update_value(S, 4, 100);list_display(S);list_free(S);S = NULL;return 0;
}

结果显示

ubuntu@ubuntu:1$ gcc *.c
ubuntu@ubuntu:1$ ./a.out
创建成功
添加成功
添加成功
添加成功
添加成功
当前线性表的元素为:3  7   1   1
排序成功
当前线性表的元素为:7  3   1   1
下标为1的数据为:3
当前线性表的元素为:7  3   1   1 // 查询线性表之外的数据
修改失败
当前线性表的元素为:7  3   1   1
释放成功

2022081班李亚楠20220914相关推荐

  1. 2022081班李亚楠20220905

    1.使用指针实现 strcpy.strcat 函数的功能 #include <stdio.h>int main(int argc, const char *argv[]) {/***使用指 ...

  2. 2022081班李亚楠20220920

    1.中序遍历:ADEFGHMZ       后序遍历:AEFDHZMG 2.前序遍历: GDAFEMHZ       中序遍历: ADEFGHMZ 1.前序遍历: GDAFEMHZ 2.后序遍历:AE ...

  3. 2022081班李亚楠20220926

    1.通过命令行传参给shell脚本文件传入两个字符串,把数值分别赋值给两个变量,实现两个变量的数值交换,然后输出两个变量的数值. #!/bin/bash #交换两个变量的值#从外部传参给变量 var1 ...

  4. 2022081班李亚楠20220901

    1.通过键盘输入6名学生的成绩,输出6名学生的成绩,使用冒泡法对班级学生的成绩升序排序,输出排序后成绩 #include <stdio.h>int main(int argc, const ...

  5. 2022081班李亚楠20220902

    1.从终端中输入一串字符,求出空格的个数: ab_cd_e_\n --->遇到\n表示输入结束         ---->数组中存储ab_cd_e ----->求出空格个数 #inc ...

  6. 2022081班李亚楠20220829

    1.从终端输入一个字符:如果是大写的 转换成小写,如果是小写的 转换成大写,如果是 0-9   按照 %d  输出对应整型的  0-9,其他字符 转换成 #并输出. #include <stdi ...

  7. 2022081班李亚楠20220927

    1.复习今日内容 2.在终端输入一个文件名,判断文件是否为空,如果不为空,判断文件是否是普通文件,如果是普通文件,就判断是否具有写权限,没有写权限,就加上写权限,并在文件最后追加一行"hel ...

  8. 2022081班李亚楠20220915

    //尾删 (作业) int list_delete_tail(LinkList L); //尾删 (作业) int list_delete_tail(LinkList L) {if(NULL==L | ...

  9. 2022081班李亚楠20220916

    1.双向链表尾插法 //尾插法 void list_insert_tail(DoubleLink D, datatype e) {// 判断if(NULL==D){printf("不合法,尾 ...

最新文章

  1. 最强无监督行人重识别方法 Cluster Contrast ReID,rank-1 94.6%
  2. python从入门到精通视频(全60集)-【网盘下载】Python从入门到精通视频(全60集)...
  3. Java多线程-Callable和Future
  4. CentOS安装GlassFish4.0 配置JDBC连接MySQL
  5. 使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器
  6. 并联串联混合的电压和电流_高考物理常考实验之电流表改装电压表怎么串联电阻...
  7. JVM 内存管理机制
  8. windows配置本地端口映射到其它电脑
  9. mysql中dml语言_八、mysql DML语言
  10. Clubhouse 推出漏洞奖励计划,严重漏洞最高可获3000美元
  11. Dubbo--002--例子程序
  12. SAS计算IV代码分享
  13. 硬盘分区表错误与解决办法
  14. 钉钉机器人关键字自动回复_【原创新软件】办公引流机器人个人微信企业微信QQ通用的自动回复,群发助手...
  15. 完美解决浏览器主页被hao123劫持,打开浏览器时自动进入hao123主页怎么办
  16. AppleWWDRCA.cer证书
  17. centOS 7 安装可视化用户界面
  18. 使用windows钩子捕获进程的启动和关闭消息
  19. String字符串中数字排序(Java)
  20. 【性能】perf + 火焰图分析软件性能瓶颈

热门文章

  1. Uniapp云开发(Uniapp入门)
  2. 集合——数组容器笔记
  3. 将ubuntu光盘作为安装源_从光盘安装ubuntu
  4. 图书馆管理系统的数据库设计
  5. zzulioj1008: 美元和人民币
  6. 解决 openwrt/Lede pppoe拨号频繁掉线的问题
  7. 【故障检测】基于 KPCA 的故障检测(Matlab代码实现)
  8. 用python赚零花钱_买不起猪肉了?用Python炒股赚点零花钱吧
  9. MATLAB交换图片红绿颜色通道,matlab的颜色映射colormap
  10. 全国青少年编程等级考试python一级真题2020年12月(含题库答题软件账号)