C_数据结构_数组
//数组 # include <stdio.h>
# include <malloc.h> //包含了 malloc 函数
# include <stdlib.h> //包含了 exit 函数 struct Arr //定义了一个叫struct Arr 的数据类型没有定义变量
{
int * pBase; //存储的是数组第一个元素的地址
int len; //数组能容纳的元素的个数
int cnt; //当前数组的有效的元素的个数
}; void init_arr(struct Arr * pArr, int length); //初始化
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 * pval); //删除
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 inverson_arr(struct Arr *pArr); //倒置 int main(void)
{
struct Arr arr;
int val; init_arr(&arr, );
show_arr(&arr);
append_arr(&arr, );
append_arr(&arr, );
append_arr(&arr, -);
append_arr(&arr, );
append_arr(&arr, );
append_arr(&arr, ); if( delete_arr(&ar, , &val) )
{
printf("删除成功!\n");
printf("您删除的元素是:%d\n", val);
}
else
{
printf("删除失败!\n");
} /*
append_arr(&arr, 2);
append_arr(&arr, 3);
append_arr(&arr, 4);
append_arr(&arr, 5);
insert_arr(&arr, 6, 99); append_arr(&arr, 6);
append_arr(&arr, 7);
if ( append_arr(&arr, 8) )
{
printf("追加成功\n");
}
else
{
printf("追加失败!\n");
}
*/ show_arr(&arr);
inverson_arr(&arr);
printf("倒置之后的内容是:\n");
show_arr(&arr);
sort_arr(&arr);
printf("排序之后的结果是:\n");
show_arr(&arr); //printf("%d\n", arr_len); return ;
} void init_arr(struct Arr * pArr, int length) //初始化
{
pArr->pBase = (int *)malloc(sizeof(int) * length);
if (NULL == pArr->pBase)
{
printf("动态内存分配失败!\n");
exit(-); //表示的是终止整个程序
}
else
{
pArr->len = length;
pArr->cnt = ;
} return ;
} bool is_empty(truct Arr *pArr); //判断是否为空
{
if ( == pArr->cnt)
return true;
else
return false;
} bool is_full(struct Arr *pArr); //判断是否满
{
if (pArr->cnt == pArr->len)
return turn;
else
return false;
} void show_arr(struct Arr *pArr) //输出
{
if ( is-empty(pArr) )
{
printf("数组为空!\n");
}
else
{
for (int i=; i<pArr->cnt; ++i)
prinf("%d ", pArr->pBase[i]); //int *
printf("\n");
}
} bool append_arr(struct Arr *pArr, int val); //追加
{
//满时返回 false
if ( is_full(pArr) )
return false; //不满时追加
pArr->pBase[pArr->cnt] = var;
(pArr->cnt)++; return true;
} bool insert_arr(struct Arr *pArr, int pos, int val); //插入
{
int i; if ( is_full(pArr) )
return false; if (pos< || pos>pArr->cnt+)
return false; for (i=pArr->cnt-; i>=pos-; --i)
{
pArr->pBase[i+i] = pArr->pBase[i];
}
pArr->pBase[pos-] = val;
pArr->cnt++ return true;
} bool delete_arr(struct Arr *pArr, int pos, int * pVal); //删除
{
if ( is-empty(pArr) )
return false;
if (pos< || pos>pArr->cnt)
return false; *pVal = pArr->pBase[pos-]
for (i=pos; i<pArr->cnt; ++i)
{
pArr->pBase[i-] = pArr->pBase[i];
}
pArr->cnt--; return true;
} void inverson_arr(struct Arr *pArr); //倒置
{
int i = ;
int j = pArr->cnt-; 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, t; for (i=; i<pArr->cnt; ++i)
{
for (j=i+; j<pArr->cnt; ++j)
{
if (pArr->pBase[i] > pArr->pBase[j])
{
t = pArr->pBase[i];
pArr->pBase[i] = pArr->pBase[j];
pArr->pBase[j] = t;
}
}
}
}
C_数据结构_数组的更多相关文章
- C_数据结构_数组的修改和删除
#include<stdio.h> typedef struct Node { int a,b; }node; node c[]; int n; void print() { int i; ...
- c_数据结构_图_邻接表
课程设计------邻接表 图的遍历实现课程设计:https://files.cnblogs.com/files/Vera-y/图的遍历_课程设计.zip #include<stdio.h> ...
- c_数据结构_哈希表
#include <stdio.h> #include <stdlib.h> #include <string.h> #define ERROR 0 #define ...
- c_ 数据结构_图_邻接矩阵
程序主要实现了图的深度遍历和广度遍历. #include <stdio.h> #include <stdlib.h> #include <string.h> #de ...
- C_数据结构_链表的链式实现
传统的链表不能实现数据和链表的分离,一旦数据改变则链表就不能用了,就要重新开发. 如上说示:外层是Teacher,里面小的是node. #ifndef _MYLINKLIST_H_ #define _ ...
- c_数据结构_队的实现
# 链式存储#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100//存储空间初始分配量 #defin ...
- c_数据结构_栈的实现
#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT ...
- c_数据结构_链表
#include<stdio.h> #include<stdlib.h> #define ERROR 0 #define OK 1 #define OVERFLOW -2 ty ...
- c_数据结构_顺序表
#define OK 1 #define ERROR 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量 #define ...
随机推荐
- udev和devfs的区别
devfs(设备文件系统)是由Linux2.4内核引入的,它的出现主要使得设备驱动程序能够自主管理自己的设备文件.具体来说,devfs具有如下优点: 可以通过程序在设备初始化时在/dev目录下创建设备 ...
- 7z常用命令行&7z检测压缩包完整性&7z压缩包错误不执行rsync同步
7Z简介&常用命令 7Z脚本使用说明 7Z检测压缩包完整性脚本 7Z压缩包错误不执行Rsync脚本 1.7Z简介&常用命令 ⑴简介: 7z,全称7-Zip, 是一款开源软件.是目前公认 ...
- JavaScript 中的匿名函数((function() {})();)与变量的作用域
以前都是直接用前端框架Bootstrap,突然想看看Javascript,发现javascript是个非常有趣的东西,这里把刚碰到的一个小问题的理解做下笔录(废话不多说,上代码). /** * Exa ...
- JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配
Java栈与堆 堆:顺序随意 栈:后进先出(Last-in/First-Out). Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.anewarray和mu ...
- 【BZOJ4259】残缺的字符串
[BZOJ4259]残缺的字符串 Description 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时, ...
- iptables和firewalld的配置
一.iptables 1.配置 vi /etc/sysconfig/iptables -A RH-Firewall-1-INPUT -m state --state NEW -p tcp -m tcp ...
- kafka TimeoutException 超时问题解决
1.报错:: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.NotLeaderForPartition ...
- PCB
Layer Stack Manager(层堆栈管理) 用户可以通过Layer Stack Manager对话框来添加更多的层. 1.选择Design>>Layer Stack Manage ...
- 安卓开发 1配置环境 (JDK+Andriod stiuio)
配置JDK+Andriod stiuio 所需要用到的JDK和AS 链接:https://pan.baidu.com/s/1smHCD1z密码:rxh2 1 JAVA_SDK 1.1 下载 htt ...
- Qt+QGIS二次开发:QGIS里的编程模型
项目(QgsProject) 用于读写项目状态 图层分组(QgsLayerTreeGroup) 项目树的分组节点,用来存放图层节点. 图层节点(QgsLayerTreeLayer) 项目树的图层节点. ...