数据结构与算法实例(数组实现)

数据结构与算法实例分析—数组

★数组是一种最简单的数据结构,它占据一块连续的内存并且顺序存储数据,所以我们需要首先指定数组的大小
★数组的空间效率不是很好,会有空闲的区域没有得到充分的应用
★时间复杂度为O(1);
★数组一旦被定义,它的维度和维界就不会再改变,因此除了结构的初始化和销毁之外,数组就只有存取和修改元素值得操作

1.数组的存储结构

2.基本操作

⑴.建造空间并进行初始化:struct triple triple_init(int v1,int v2,int v3);
⑵.释放已开辟空间:void triple_free(struct triple
t);
⑶.更改空间数据:void triple_set(struct triple t,int index,int e);
⑷.访问空间数据:int triple_get(struct triple
t,int index);
⑸.判断数据是否升序:int triple_isascending(struct triple t);
⑹.判断数据是否降序:int triple_isdescending(struct triple
t);
⑺.查找数据中最大值:int triple_max(struct triple t);
⑻.查找数据中最小值:int triple_min(struct triple
t);

3.基本代码

Triple.h

#ifndef __TRIPLE_H__
#define __TRIPLE_H__
//定义结构体存放存储结构数组的首地址
struct triple;
//开辟数组(内存空间),返回指向已开辟空间的指针
struct triple *triple_init(int v1,int v2,int v3);
void triple_free(struct triple *t);
//将元素存储入内存空间
void triple_set(struct triple *t,int index,int e);
//将元素从内存空间取出
int triple_get(struct triple *t,int index);
//判断数组中的元素是否为升序排列
int triple_isascending(struct triple *t);
//判断数组中的元素是否为降序排列
int triple_deascending(struct triple *t);
//从存储结构中取出数值比较,返回数组中的最大值
int triple_max(struct triple *t);
//从存储结构中取出数值比较,返回数组中的最小值
int triple_min(struct triple *t);

#endif

Triple.c

#include <stdlib.h>
#include <assert.h>
#include “triple.h”
//定义结构体作为一级结构,结构体用来存放指向整型的指针变量
Struct triple{
     Int *data;
}
//将v1,v2,v3存放到定义的存储结构中
Struct triple *triple_init(int v1,int v2,int v3)
{
    Struct triple *t=NULL;
    //使用malloc函数开辟指定内存大小的空间,返回空间首地址强制类型转换为指向triple结构体类型,最后将变量赋值到t
    t=(struct triple *)malloc(sizeof(struct triple);
    if(t==NULL)  return NULL;
    //断言t不为空
    assert(t!=NULL);
    t->data=NULL;
    //t->data变量中存放长度为3的数组的首地址
    t->data=(int *)malloc(sizeof(int)*3);
    if(t->data==NULL){
    free(t);
    return NULL}

    assert(t->data!=NULL);

    t->data[0]=v1;
    t->data[1]=v2;
    t->data[2]=v3;

    return t;
}

void triple_free(struct triple *t)
{
    assert(t->data!=NULL);
    assert(t!=NULL);
    //将内存空间逐级释放
    free(t->data);
    free(t);
}
//将传入的整型元素e,插入到数组的index位置
void triple_set(struct triple *t,int index,int e)
{
    assert(t!=NULL);
    assert(t->data!=NULL);
    assert(index>=0&&index<3);

    t->data[index]=e;
}

Int triple_get(struct triple *t,int index)
{
    assert(t!=NULL);
    assert(t->data!=NULL);
    assert(index>=0&&index<3);

    return  t->data[index];
}
//判断数组中的元素是否按照升序存放,是返回1,否返回0
int triple_isascending(struct triple *t)
{
    assert(t!=NULL);
    assert(t->data!=NULL);

    if(t->data[0]<=t->data[1]&&t->data[1]<=t->data[2]){
    return 1;
    }
    return 0;
}

int triple_isdeascending(struct triple *t)
{
    return 0;
}
//通过结构体指针变量t,将数组中的元素依次取出做比较,返回最大值
int triple_max(struct triple *t)
{
    int _max;
    assert(t!=NULL);
    assert(t->data!=NULL);

    _max=t->data[0];

    If(_max<t->data[1]) _max=t->data[1];
    If(_max<t->data[2]) _max=t->data[2];

    return max;
}
//通过结构体指针变量t,将数组中的元素依次取出做比较,返回最小值
Int triple_min(struct triple *t)
{
    Int _min;

    assert(t!=NULL);
    assert(t->data!=NULL);

    _min=t->data[0];

    if(_min>t->data[1]) _min=t->data[1];
    if(_min>t->data[2]) _min=t->data[2];

    return _min;
}

Main.c

#include <stdio.h>
#include <stdlib.h>

#include "triple.h"

int main(int argc, char *argv[]) {
    struct triple *t=NULL;

    t=triple_init(23,45,87);

    if(triple_isascending(t)){
    printf("The array is ascending.\n");
    }else{
    printf("The array is not ascending.\n");
    }
    printf("The max is %d\n",triple_max(t));
    printf("The min is %d\n",triple_min(t));

    triple_set(t,2,234);

    printf("The 1th element is %d\n",triple_get(t,2));

    if(triple_isascending(t)){
    printf("The array is ascending.\n");
    }else{
    printf("The array is not ascending.\n");
    }

    triple_free(t);

    return 0;
}

四.运行结果

原文地址:https://www.cnblogs.com/miaowulj/p/12235638.html

时间: 2024-11-06 17:58:14

数据结构与算法实例(数组实现)的相关文章

Java数据结构和算法之数组与简单排序

一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信息分组的便利方法. 一维数组 一维数组(one‐dimensional array )实质上是相同类型变量列表.要创建一个数组,你必须首先定义数组变量所需的类型.通用的一维数组的声明格式是: type var‐name[ ]; 获得一个数组需要2步: 第一步,你必须定义变量所需的类型. 第二步,你必

Java数据结构与算法之数组

数组特点: 1.大小固定 2.同一数据类型 3.下标访问 4.数据项可重复 Java数据类型:基本类型(int和double)和对象类型.在许多编程语言中,数组也是基本类型.但在Java中把它们当作对象来对待,因此在创建数组时必须使用new操作符. 有序数组与无序数组比较:最主要的好处是查找速度比无序数组快多了.不好的方面是在插入操作中由于所有靠后的数据都需要移动以疼开空间,所以速度较慢.有序数组和无序数组数据中的删除操作都很慢,这是因为数据项必须向前移动来填补已删除数据项的空洞. 数据访问:从

Java数据结构和算法(二)——数组

数组的用处是什么呢?--当你需要将30个数进行大小排列的时候,用数组这样的数据结构存储是个很好的选择,当你是一个班的班主任的时候,每次要记录那些学生的缺勤次数的时候,数组也是很有用.数组可以进行插入,删除,查找等. 1)创建和内存分配 Java中有两种数据类型,基本类型和对象类型,也有人称为引用类型,Java中把数组当成对象,创建数组时使用new操作符. int array[] = new int[10]; 既然是对象,那么array便是数组的一个引用,根据Java编程思想(一) -- 一切都是

数据结构与算法:数组(一)

数据结构与算法是计算机发展的基石,现代计算机的起源是数学,数学的核心是算法,计算机历史上每一次大的变革都离不开算法的推动.纵然"条条大路通罗马",但好的算法永远比提高硬件设备管用. 在排序数组中找出给定数字出现的次数 计算两个有序整型数组的交集 如何找出数组中重复次数最多的数 在On的时间复杂度内找出数组中出现次数超过了一半的数 找出数组中唯一的重复元素 解题方法 引申一没有要求每个数组只访问一次不能用辅助存储空间 引申二 在排序数组中,找出给定数字出现的次数 在排序数组中,找出给定数

《Java数据结构和算法》- 数组

Q: 数组的创建? A: Java中有两种数据类型,基本类型和对象类型,在许多编程语言中(甚至面向对象语言C++),数组也是基本类型.但在Java中把数组当做对象来看.因此在创建数组时,必须使用new操作符: int [] objArray = null; // defines a reference to an array objArray = new int[100]; // creates the array, and sets objArray to refer to it 或使用等价的

数据结构与算法实例(哈希表实现)

数据结构与算法(哈希表) 哈希函数:在记录的关键字与记录的存储地址之间建立的一 种对应关系叫哈希函数. 哈希函数是一种映象,是从关键字空间到存储地址空间的一 种映象.可写成:addressi=H(keyi) ,其中i是表中某 个元素. 哈希表:应用哈希函数,由记录的关键字确定记录在表中的 地址,并将记录放入此地址,这样构成的表叫哈希 ★哈希表的特点就是数据与其在表中的位置存在相关性,也就是有关系的,通过数据应该可以计算其位置,哈希表最大的特点是是可以快速实现查找,插入和删除.因为它独有的特点,H

数据结构与算法—稀疏数组和队列

目录 稀疏数组和队列 1.稀疏数组 1.1 解决方法 1.2 代码实现 2. 队列 2.1 数组模拟队列 2.2 数组模拟环形队列 稀疏数组和队列 1.稀疏数组 所谓稀疏数组就是当数组中大部分的内容值都未被使用(或都为零),在数组中仅有少部分的空间使用.因此造成内存空间的浪费,为了节省内存空间,并且不影响数组中原有的内容值,我们可以使用稀疏数组去压缩数据.OK,如果你不明白,那我们来看一个例子. ? 在一个五子棋中,有存盘和续上盘的功能 分析问题:因为该二维数组的很多默认值是 0,因此记录了很多

数据结构和算法二(数组)

一.数组 1.概念 数组是一种线性表数据结构,它用一种连续的内存空间,来存储一组具有相同类型的数据. 线性表:数组.链表.队列.栈等 非线性表:二叉树.堆.图等 2.连续的内存空间和相同类型的数据 优点:具有随机范文的特性,根据下标随机访问的时间复杂度为O(1) 缺点:低效的插入和删除 插入:最好O(1),最坏O(n),平均O(n) 插入:数组若无序,插入新的元素时,可以将第K个位置元素移动到数组末尾,把新的元素插入到第K个位置,此时复杂度为O(1) 删除:最好(1),最坏O(n),平均O(n)

数据结构与算法之数组

数组的基本概念:数组是最简单最常用的数据结构,但是也有一些注意事项: (1)数组的分配方式以及存储位置: (2)初始化: (3)不同语言中的数组高级定义: (4)多维数组: C/C++中数组分配方式: (1)int a[10]; 适用于数组长度已知或者对数组长度不敏感的情况,比如定义一个字符串. (2)int *a = (int *)malloc(sizeof(int)*n); 用在C中,适用于动态申请数组的长度.记得最后要free,防止内存泄露. (3)int[] a = new int[n]