`

线性结构之数组

 
阅读更多

数组

把所有节点用一根直线串起来而形成的一种数据结构称为线性结构。

今天我想谈谈线性结构中的数组。大家都知道数组是连续存储的一种线性结构,而数组名为该数组元素的首地址。如int a[3]={1,2,3};a就等价于&a[0],而&a[0]本身是int *类型,所以我们通常利用数组名来与指针建立联系,进而跨函数使用内存对数组进行操作。

实例说明:

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
struct Arr
{
	int* pBase;//pBase存储的是数组第一个元素的地址
	int len;//len为数组所能容纳的最大元素的个数
	int cnt;//当前数组有效元素的个数
};
void InitArray(struct Arr *pArr,int length);//初始化数组
void AppendArray(struct Arr *pArr,int val);//尾部追加数据
int IsFull(struct Arr *pArr);//判断数组是否已满(我的这个vc++编译器不知道为什么,函数返回值不能为bool型;所以这里我把它设置成int型来判断)
void ShowArray(struct Arr *pArr);//输出显示
int IsEmpty(struct Arr *pArr);//判断数组是否为空
void DeleteArray(struct Arr *pArr,int pos,int *pVal);//删除元素,pVal指向pos(从1开始)位置的值
void InsertArray(struct Arr *pArr,int pos,int val);//插入元素,pos从1开始
void SortArray(struct Arr *pArr);//排序,因为初学数据结构,我这里用的是冒泡排序法
void InverseArray(struct Arr *pArr);//倒置
void GetByPostion(struct Arr *pArr,int pos);//根据位置来查找元素
void ModifyArray(struct Arr *pArr,int pos,int val);//修改元素元素,pVal指向pos(从1开始)位置的值
int main()
{
	struct Arr arr;//为arr分配内存
	int val;
    InitArray(&arr,6);
    AppendArray(&arr,7);
	AppendArray(&arr,2);
	AppendArray(&arr,5);
	AppendArray(&arr,9);
	printf("初始化");
	ShowArray(&arr);
    InsertArray(&arr,4,6);
	printf("插入后");
    ShowArray(&arr); 
	DeleteArray(&arr,3,&val);
	printf("删除的元素为:%d\n",val);
	printf("删除后");
	ShowArray(&arr); 
	SortArray(&arr);	
	printf("排序后");
	ShowArray(&arr); 
	InverseArray(&arr);
	printf("倒置后");
	ShowArray(&arr);
	GetByPostion(&arr,2);
	ModifyArray(&arr,1,1000);
	printf("修改后");
	ShowArray(&arr);
	return 0;
}

void InitArray(struct Arr *pArr,int length)
{
	pArr->pBase=(int *)malloc(sizeof(int)*length);//为结构体成员pBase动态分配一块内存
	if(NULL==pArr->pBase)
	{
		printf("动态内存分配失败!");
		exit(1);//终止整个程序
	}
	else
	{
		pArr->len=length;
		pArr->cnt=0;
	}
}

int IsFull(struct Arr *pArr)
{
	if(pArr->cnt==pArr->len)
		return 1;
	else
		return -1;
}

void AppendArray(struct Arr *pArr,int val)
{
	if(1==IsFull(pArr))
		printf("数组已满,越界元素添加失败!\n");
	else 
		pArr->pBase[pArr->cnt++]=val;
}

int IsEmpty(struct Arr *pArr)
{
	if(0==pArr->cnt)
		return 1;
	else
		return -1;
}

void ShowArray(struct Arr *pArr)
{
	int i;
	if(1==IsEmpty(pArr))
		printf("数组为空!\n");
	else
	{
		printf("数组元素为:");
		for(i=0;i<pArr->cnt;i++)
			printf("%d  ",pArr->pBase[i]);
		printf("\n");
	}
}

void DeleteArray(struct Arr *pArr,int pos,int *pVal)
{
	int i;
	if(1==IsEmpty(pArr))
		printf("数组为空!\n");
	else
	{
		if(pos<1||pos>pArr->cnt)
			printf("删除操作有误!%d删除失败!\n",*pVal);
		else
		{
			*pVal=pArr->pBase[pos-1];//要删除的元素
			for(i=pos;i<pArr->cnt;i++)
				pArr->pBase[i-1]=pArr->pBase[i];
			pArr->cnt--;
		}
	}
}

void InsertArray(struct Arr *pArr,int pos,int val)
{
	int i;
	if(1==IsFull(pArr))
		printf("数组已满,不能就行插入!\n");
	else
	{
		if(pos<1||pos>pArr->cnt)
			printf("插入操作有误!%d插入失败!\n",val);
		else
		{
			for(i=pArr->cnt-1;i>=pos-1;i--)
				pArr->pBase[i+1]=pArr->pBase[i];
			pArr->pBase[pos-1]=val;
			pArr->cnt++;
		}
	}
}

void SortArray(struct Arr *pArr)
{
	int i,j,t;
	for(i=0;i<pArr->cnt-1;i++)
	{
		for(j=0;j<pArr->cnt-i-1;j++)
		{
			if(pArr->pBase[j]>pArr->pBase[j+1])
			{
				t=pArr->pBase[j];
				pArr->pBase[j]=pArr->pBase[j+1];
				pArr->pBase[j+1]=t;
			}
			
		}
	}	
}

void InverseArray(struct Arr *pArr)
{
	int i,t;
	for(i=0;i<pArr->cnt/2;i++)
	{
		t=pArr->pBase[i];
        pArr->pBase[i]=pArr->pBase[pArr->cnt-i-1];
		pArr->pBase[pArr->cnt-i-1]=t;
	}
	return; 
}

void GetByPostion(struct Arr *pArr,int pos)
{
	if(1==IsEmpty(pArr))
		printf("数组为空!\n");
	else
	{
		if(pos<1||pos>pArr->cnt)
	    	printf("修改操作操作有误!\n");
		else
			printf("\n查找%d号位置的元素为:%d\n",pos,pArr->pBase[pos-1]);
	}
}

void ModifyArray(struct Arr *pArr,int pos,int val)
{
	if(1==IsEmpty(pArr))
		printf("数组为空!\n");
	else
	{
		if(pos<1||pos>pArr->cnt)
			printf("修改操作操作有误!\n");
		else
			pArr->pBase[pos-1]=val;
	}
}


注意:

1.数组为空

2.数组越界

3.进行增删改查时的位置及范围

结束语

有关数组的相关操作就写到这,若文中有不妥或有误的地方还请指点。 微笑明天开始学习数据结构中最基本也是非常重要的线性结构中的离散存储结构---链表

分享到:
评论

相关推荐

    数据结构实战 -- 线性结构静态数组表示法(C实现源码)

    静态数组是实现线性结构的简单而基础的方法,尤其在C语言中广泛使用。本文将深入探讨静态数组表示法在实现线性结构中的应用,并通过C语言源码来解析其工作原理。 静态数组是一种预先分配固定大小的内存空间来存储...

    数据结构实战 -- 线性结构动态数组表示法(C实现源码)

    线性结构是一种基础且广泛使用的数据结构类型,其中动态数组是一种典型的线性结构实现。本实战项目将聚焦于如何使用C语言来实现动态数组,以便更好地理解和操作线性数据。 动态数组与静态数组不同,它能够在运行时...

    线性结构和非线性结构、稀疏数组、队列、链表(LinkedList) 数组和链表.pdf

    通过对线性结构与非线性结构、稀疏数组的理解,我们可以更好地选择合适的数据结构来解决问题。线性结构因其简单易用而被广泛应用于各种算法设计中,而非线性结构则适用于更复杂的关系表示。稀疏数组作为一种特定场合...

    数据结构顺序表、链表和数组是逻辑结构还是物理(存储)结构? 数组和链表.pdf

    在数据结构中,逻辑结构可以分为线性结构和非线性结构两种。线性结构是一种特殊的逻辑结构,其中每个数据元素只有一个直接前驱和直接后继,如线性表、栈、队列、串等。非线性结构是一种复杂的逻辑结构,其中每个数据...

    线性结构总结和习题( 数据结构 )

    线性结构包括数组、链表等,它们各自有不同的特性和应用场景。 数组是最基本的线性结构实现方式,分为静态数组和动态数组。静态数组在内存中预分配固定大小的空间,适用于已知数据规模的情况。动态数组则允许在运行...

    数据结构之树状数组讲解

    树状数组是一种高效的数据结构,能够解决数量级较大的区间求和问题、区间求最值问题、区间修改、查询问题以及求逆序对等应用。其时间复杂度为 O(log2n),远远快于线性时间 O(n)。 树状数组的用途: * 区间求和:...

    将二维数组进行线性插值

    在本场景中,我们处理的是一个二维数组,这种数据结构通常用来存储矩阵或图像数据。以下是关于二维数组和线性插值的详细知识: 二维数组在计算机科学中,是一个多维数据结构,它由一串连续的内存位置组成,这些位置...

    java线性数组实现学生信息管理

    "java线性数组实现学生信息管理" ...10. 线性数组和学生信息管理系统的关系:线性数组和学生信息管理系统是紧密相关的,线性数组被用于存储学生信息,而学生信息管理系统是线性数组的应用场景之一。

    数据结构实验 数组和广义表

    其次,实验要求学习者掌握线性数组和广义表的存储结构,并用C语言加以实现。这不仅涉及到数据结构的理论知识,更要求学习者具备将其转化为实际代码的能力。再次,实验强调了对数组和广义表各种基本操作的掌握,这些...

    数据结构_数组的实现

    数组是计算机科学中基础且重要的数据结构之一,它在各种编程语言中都有广泛的应用。数组是一种线性数据结构,允许存储同一类型的数据元素,并通过一个唯一的索引来访问这些元素。这个索引通常是从0开始的整数,表示...

    数据结构数组的实验报告

    数组是一种线性数据结构,其中的元素按照特定的顺序存储,每个元素都可以通过一个唯一的索引来访问。数组的索引通常从0开始,但在某些语言或特定应用中,索引可能从1开始。 在本实验报告中,主要探讨了数组的两种...

    数据结构:数组存储结构

    数组存储结构是数据结构领域一个基础且重要的概念,它是一种线性数据结构,用一组连续的存储单元来存储一系列的值,通常是相同类型的数据。在C++等编程语言中,数组可以是一维的也可以是多维的,适用于对数据集合...

    C++数组元素位置的查找程序

    在C++编程语言中,数组是一种非常基础且重要的数据结构,它允许我们存储相同类型的数据集合。本程序的目的是帮助理解和实现如何在数组中查找特定元素的位置,这对于初学者来说是一个很好的实践课题。在此,我们将...

    matlab 三维 数组 结构数组-创建结构数组 算法开发、数据可视化、数据分析以及数值计算 Matlab课程 教程 进阶 资源

    在MATLAB中,数组是数据处理的核心工具,而三维数组和结构数组是其高级特性,为复杂的算法开发、数据可视化、数据分析以及数值计算提供了强大的支持。本教程将深入探讨这两个概念,帮助用户提升MATLAB技能并进行进阶...

    数据结构C语言 数组链表,树,图,矩阵,搜索查找

    本资料包“数据结构C语言 数组链表,树,图,矩阵,搜索查找”提供了一个全面的学习资源,旨在帮助学习者深入理解这些基本概念。 数组是数据结构的基础,它是一组相同类型元素的集合,可以通过索引来访问每个元素。...

    北邮数据结构 用数组实验排序

    数组是一种线性数据结构,由相同类型的元素组成,这些元素在内存中是连续存储的。通过索引可以快速访问数组的任何位置,其时间复杂度为O(1)。数组排序则是指对数组中的元素按照某种特定规则进行重新排列的过程,常见...

    线性结构模版 线性结构

    1. **数组**:数组是最基本的线性结构,它是由相同类型的元素组成的集合,这些元素在内存中是连续存储的,可以通过索引来访问任意位置的元素。数组的优点是访问速度快,但插入和删除操作在非末尾位置时效率较低,...

    数据结构中数组,队列,栈

    数组、栈和队列是数据结构中最基本的线性结构,它们在编程和算法设计中有着广泛的应用。 一、数组 数组是一种最简单且最常用的数据结构,它将具有相同类型的一组数据元素存储在一个连续的内存空间中。数组分为一维...

    数据结构中的数组和广义表,C语言

    数组是一种线性数据结构,它由相同类型的元素按照特定顺序排列组成。数组的关键特性是通过下标来访问和操作元素。在二维数组中,每个元素都有一个行下标i和一个列下标j,共同确定其位置。例如,一个m×n阶的矩阵是一...

    线性结构 ADT表的操作

    ### 线性结构 ADT表的操作 #### 一、线性结构概述 线性结构是一种重要的抽象数据类型(Abstract Data Type, ADT),在计算机科学中占据核心地位。线性结构的特点在于它由一系列相同类型的数据元素构成,这些元素...

Global site tag (gtag.js) - Google Analytics