2022081班李亚楠20220914
//选择排序(作业)
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相关推荐
- 2022081班李亚楠20220905
1.使用指针实现 strcpy.strcat 函数的功能 #include <stdio.h>int main(int argc, const char *argv[]) {/***使用指 ...
- 2022081班李亚楠20220920
1.中序遍历:ADEFGHMZ 后序遍历:AEFDHZMG 2.前序遍历: GDAFEMHZ 中序遍历: ADEFGHMZ 1.前序遍历: GDAFEMHZ 2.后序遍历:AE ...
- 2022081班李亚楠20220926
1.通过命令行传参给shell脚本文件传入两个字符串,把数值分别赋值给两个变量,实现两个变量的数值交换,然后输出两个变量的数值. #!/bin/bash #交换两个变量的值#从外部传参给变量 var1 ...
- 2022081班李亚楠20220901
1.通过键盘输入6名学生的成绩,输出6名学生的成绩,使用冒泡法对班级学生的成绩升序排序,输出排序后成绩 #include <stdio.h>int main(int argc, const ...
- 2022081班李亚楠20220902
1.从终端中输入一串字符,求出空格的个数: ab_cd_e_\n --->遇到\n表示输入结束 ---->数组中存储ab_cd_e ----->求出空格个数 #inc ...
- 2022081班李亚楠20220829
1.从终端输入一个字符:如果是大写的 转换成小写,如果是小写的 转换成大写,如果是 0-9 按照 %d 输出对应整型的 0-9,其他字符 转换成 #并输出. #include <stdi ...
- 2022081班李亚楠20220927
1.复习今日内容 2.在终端输入一个文件名,判断文件是否为空,如果不为空,判断文件是否是普通文件,如果是普通文件,就判断是否具有写权限,没有写权限,就加上写权限,并在文件最后追加一行"hel ...
- 2022081班李亚楠20220915
//尾删 (作业) int list_delete_tail(LinkList L); //尾删 (作业) int list_delete_tail(LinkList L) {if(NULL==L | ...
- 2022081班李亚楠20220916
1.双向链表尾插法 //尾插法 void list_insert_tail(DoubleLink D, datatype e) {// 判断if(NULL==D){printf("不合法,尾 ...
最新文章
- 最强无监督行人重识别方法 Cluster Contrast ReID,rank-1 94.6%
- python从入门到精通视频(全60集)-【网盘下载】Python从入门到精通视频(全60集)...
- Java多线程-Callable和Future
- CentOS安装GlassFish4.0 配置JDBC连接MySQL
- 使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器
- 并联串联混合的电压和电流_高考物理常考实验之电流表改装电压表怎么串联电阻...
- JVM 内存管理机制
- windows配置本地端口映射到其它电脑
- mysql中dml语言_八、mysql DML语言
- Clubhouse 推出漏洞奖励计划,严重漏洞最高可获3000美元
- Dubbo--002--例子程序
- SAS计算IV代码分享
- 硬盘分区表错误与解决办法
- 钉钉机器人关键字自动回复_【原创新软件】办公引流机器人个人微信企业微信QQ通用的自动回复,群发助手...
- 完美解决浏览器主页被hao123劫持,打开浏览器时自动进入hao123主页怎么办
- AppleWWDRCA.cer证书
- centOS 7 安装可视化用户界面
- 使用windows钩子捕获进程的启动和关闭消息
- String字符串中数字排序(Java)
- 【性能】perf + 火焰图分析软件性能瓶颈