C语言代码实现数组(简单)

前一节课讲了数组的删除功能实现:删除功能

本节课内容我们实现数组的反转功能和冒泡排序功能: 

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>struct Arr{int * pBase; //存储数组第一个元素的地址int len;   //数组所能容纳最大元素的个数int cnt;   //当前数组元素的个数
};void init_arr(struct Arr * pArr,int lenth);
bool append_arr(struct Arr * pArr, int val);                                       //追加
bool insert_arr(struct Arr * pArr, int pos, int val);                              //插入
bool delete_arr(struct Arr * pArr, int pos, int * val);                         //删除成功失败,并且还要知道删除了什么元素,这个时候我们只能用指针了传值
int get(); 
bool is_empty(struct Arr  * pArr);                 //判断数组是否为空
bool is_full(struct Arr  * pArr);                  //判断数组是不是满了
void sort_arr(struct Arr  * pArr);                 //排序
void show_arr(struct Arr  * pArr);
void inversion_arr(struct Arr  * pArr);            //反转int main(void) {struct Arr arr;init_arr(&arr,6);    //初始化数组show_arr(&arr);      //数组输出   append_arr(&arr, 12);  //追加元素append_arr(&arr, 5);append_arr(&arr, 55);append_arr(&arr, 4);append_arr(&arr, 58);append_arr(&arr, 116);/*if (append_arr(&arr, 7)) {//第七个元素追加不进printf("元素追加成功  ");}else {printf("元素追加失败  ");}*///插入一个试试//insert_arr(&arr, 1, 99);show_arr(&arr);int val;if (delete_arr(&arr, 1, &val)) {printf("\n删除成功\n");printf("你删除的元素 %d\n", val);}else {printf("\n删除失败\n");}show_arr(&arr);      //数组输出   inversion_arr(&arr);  //反转printf("\n反转\n");show_arr(&arr);sort_arr(&arr);     //排序printf("\n排序\n");show_arr(&arr);//	printf("%d\n", arr.len);   //	 while (true){}return 0;
}void init_arr(struct Arr  * pArr ,int lenth) {pArr->pBase = (int *)malloc(sizeof(int) * lenth);if (NULL==pArr->pBase) {printf("动态内存分配失败!\n");exit(-1);}else {pArr->len = lenth;pArr->cnt = 0;}return;
}void show_arr(struct Arr  * pArr) {//"数组为空"if (is_empty(pArr)) {   //is_empty//提示用户数组为空printf("户数组为空!\n");}else {//输出有效内容for (int i = 0; i < pArr->cnt; ++i){printf("%d  ",pArr->pBase[i]);}}
}bool is_empty(struct Arr  * pArr) {//数组有效个数为0 视为空if (0==pArr->cnt) {return true;}else {return false;}}/**
* 数组追加功能
*/
bool append_arr(struct Arr * pArr, int val) {//1,判断数组是不是满了if (is_full(pArr)) {return false;}//数组木有满时追加pArr->pBase[pArr->cnt] = val;(pArr->cnt)++;return true;}/**
*  判断数据是不是满了
*
*/
bool is_full(struct Arr  * pArr) {if (pArr->cnt == pArr->len) {return true;}else {return false;}}/*
*  插入
*  
*/
bool insert_arr(struct Arr * pArr, int pos, int val) {if (is_full(pArr)) {printf("数组已经满了  ");return false;}if (pos < 1 || pos>(pArr->cnt) + 1) {printf("插入的位置不合法  ");return false;}//元素后移for (int i = (pArr->cnt) - 1; i > pos - 1; --i) {   //这个pos是从1开始的  数组下标从0开始的//从最后一个元素开始后移一个位置pArr->pBase[i + 1] = pArr->pBase[i];}pArr->pBase[pos-1] = val;}/** 删除功能*/
bool delete_arr(struct Arr * pArr, int pos, int * val) {if (is_empty(pArr)) {printf("数组是空的");return false;}if (pos<1 || pos>pArr->cnt) {printf("要删除的元素位置不合法");return false;}*val = pArr->pBase[pos - 1];//删除元素之后,元素的位置要移动for (int i = pos; i < pArr->cnt;++i) {pArr->pBase[i - 1] = pArr->pBase[i];}(pArr->cnt)--;return true;
}/*
*
*数组元素反转功能
*/
void inversion_arr(struct Arr  * pArr) {int i = 0;int j = pArr->cnt - 1;int t;while (i<j){t = pArr->pBase[i];pArr->pBase[i]= pArr->pBase[j];pArr->pBase[j] = t;++i;--j;}return;
}/*
* 数组冒泡排序
*/
void sort_arr(struct Arr  * pArr) {int i, j;int temp;for (i = 0; i < pArr->cnt; i++){for (j = 0;  j< pArr->cnt-i-1; j++){if (pArr->pBase[j] > pArr->pBase[j+1]) {              //两两比较  交换位置  大的元素后移       循环比较找出最大值temp = pArr->pBase[j];                 //将这个值大的元素用一个临时变量存起来pArr->pBase[j] = pArr->pBase[j+1];     //将后面小的元素赋值给前面的位置  前移pArr->pBase[j + 1] = temp;             //将这个保存在临时变量的值大的元素赋值给后面这个位置  这样就完成了两个元素的位置交换}}}}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576391.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据在市场运营中的应用

数据在市场运营中的应用 1. 背景 目前的产品运营、用户拉新、渠道投放、留存等都是靠人工进行策略制定&#xff0c;有的公司和部门完全靠着以前的经验在尝试互联网产品的市场营销和运营。这样不仅效率很低&#xff0c;而且效果也不显著。 主要存在的问题有以下几点&#xff…

C语言的typedef用法

案例1&#xff1a; #include <stdio.h> #include <string.h> #include <malloc.h>typedef int zhangsan; //为int在多取一个名字 zhangsan等价于intstruct Student{int sid;char sname[100];char sex;} ST;int main() {int i 10; //等价于zhangsan i10…

信息流项目计划和思路

目录 一、对项目的认识. 4 1&#xff0e;用户需求和竞品. 4 2. 项目现状. 4 3. 发展前景. 4 二、项目的业务方向和思路. 6 1. 业务方向. 6 2. 2020年目标. 6 3. 思路. 6 3.1用户留存提升&#xff08;6%->12%&#xff09;. 6 3.2日活提升&#xff08;30万->80万…

MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结

MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中&#xff0c;N指的是字符的长度,VARCHAR类型最大支持65535,指的是65535个字节,但并不支持65535长度的varchar&#xff0c;65535中应该包含了所有字段的长度、变长字段长度标示…

数据结构链表知识入门

链表定义: n个节点离散分配&#xff0c; 彼此通过指针相连 每个节点只有一个前驱节点&#xff0c;每个节点只有一个后续节点 首节点没有前驱节点尾节点没有后续节点 专业术语: 首节点:第一个有效节点尾节点:最后一个有效节点头结点: 1&#xff0c;第一个有效节点之前的那个节…

《关键对话——注意观察,如何判断对话氛围是否安全》读书笔记(四)

《关键对话——注意观察&#xff0c;如何判断对话氛围是否安全》读书笔记(四) 在对话过程中&#xff0c;既要关注对话内容&#xff08;即讨论的主题&#xff09;&#xff0c;也要观察对话气氛&#xff08;即参与者的反应&#xff09;。越早意识到你和对方退出了对话机制&#x…

扬长避短使用Windbg和Visual Studio高效调试调试你的代码

扬长避短使用Windbg和Visual Studio高效调试调试你的代码 经常被问及这样的问题&#xff1a; 你为什么非要使用Windbg调试你的程序&#xff1f; 记得有一次面试的时候笔者也被问到这样的问题&#xff0c;我的回答是&#xff1a;不是我非要使用Windbg, 只是在不同的情况下使用不…

链表的分类

分类: 单链表 双链表:每一个节点有两个指针域 循环链表&#xff1a;能通过任何一个节点找到其他所有的结点 非循环链表 链表中第一个结点的存储位置叫做头指针&#xff0c;那么整个链表的存取就必须是从头指针开始进行了。之后的每一个结点&#xff0c;其实就是上一个的后继指…

机器学习基础笔记总结

最近在学习latex&#xff0c;将之前的机器学习基础知识相关的笔记用latex整理了以下&#xff0c;源地址如下&#xff1a; https://github.com/duankai/latex_book&#xff0c;感兴趣的可以自由下载&#xff0c;也可以随意使用latex的格式。 pdf 效果如下&#xff0c;文件可在h…

IOS基础:ActionSheet(上拉菜单)的实现

一看图就明白了&#xff0c;毋需多说。 [java] view plaincopyprint?UIActionSheet* mySheet [[UIActionSheet alloc] initWithTitle:"ActionChoose" delegate:self cance…

Eureka的优点

Eureka的优势 1、在Eureka平台中&#xff0c;如果某台服务器宕机&#xff0c;Eureka不会有类似于ZooKeeper的选举leader的过程&#xff1b;客户端请求会自动切换到新的Eureka节点&#xff1b;当宕机的服务器重新恢复后&#xff0c;Eureka会再次将其纳入到服务器集群管理之中&a…

Word2vec学习笔记总结

git地址&#xff1a; https://github.com/duankai/latex_book/tree/master/word2vec

在 Objective-C 中对 Block 应用 property 时的注意事项

应当使用&#xff1a;property (nonatomic, copy)今天在这个问题上犯错误了&#xff0c;找了好久才知道原因。另外&#xff0c;简单的进行反汇编看了下&#xff0c;Block 被存储在静态变量区&#xff0c;运行时构造出一个运行栈&#xff0c;进行调用。retain 并不会改变 Block …

创建链表和遍历链表算法演示

#include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h>typedef struct Node {int data; //数据域struct Node * pNext; //指针域}Node, *pNode;//函数声明 pNode create_list(); void traverse_list(pNode pHead); int…

Redis 21问,你接得住不?

转载文章&#xff0c;原文&#xff1a;https://zhuanlan.zhihu.com/p/130923806 1.什么是redis? Redis 是一个基于内存的高性能key-value数据库。 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据库&#xff0c;很像memcached&#xff0c;整个数据库统统加载在内存…

@Autowired、@Resource

Autowired通过 Autowired的使用来消除 set &#xff0c;get方法 - Spring 2.5 JPA hibernate 使用方法的点滴整理我们编写spring 框架的代码时候。一直遵循是这样一个规则&#xff1a;所有在spring中注入的bean 都建议定义成私有的域变量。并且要配套写上 get 和 set方法。虽然…

SpringCloud 入门教程(七): 熔断机制 -- 断路器

对断路器模式不太清楚的话&#xff0c;可以参看另一篇博文&#xff1a;断路器&#xff08;Curcuit Breaker&#xff09;模式&#xff0c;下面直接介绍Spring Cloud的断路器如何使用。 SpringCloud Netflix实现了断路器库的名字叫Hystrix. 在微服务架构下&#xff0c;通常会有多…

ABTest系统调研和需求

一、AB测试的必要性 1.1 算法评估 线下可以使用离线的AUC&#xff0c;NDCG等指标进行算法模型的评估&#xff0c;算法上线后怎样进行算法间的评估&#xff0c;上线的算法是好是坏&#xff0c;好多少&#xff1f;坏多少&#xff1f; 要有效评估算法&#xff0c;必须借助AB测试…

Shell基本命令汇总

几个基本的shell命令&#xff0c;用ssh管理主机必备。 1.ls 列出目录下的文件&#xff0c;不同类型的文件颜色不同&#xff0c;例如蓝色是文件夹&#xff0c;白色是文件 [rootrestoretmp steph]# ls file.html public_html test [rootrestoretmp steph]# 参数&#xff1a; ls…

SpringCloud 入门教程(八): 断路器指标数据监控Hystrix Dashboard 和 Turbine

1. Hystrix Dashboard (断路器&#xff1a;hystrix 仪表盘) Hystrix一个很重要的功能是&#xff0c;可以通过HystrixCommand收集相关数据指标. Hystrix Dashboard可以很高效的现实每个断路器的健康状况。 1&#xff09;. 在Ribbon服务g和Feign服务的Maven工程的pom.xml中都加…