#include <iostream> using namespace std; /* 数组 逻辑结构:数组中元素本身就是 一种数据结构,可以帮二维数组当成 线性表的线性表。 存储结构: 由于数组是固定的格式和数量的数据结合,不能做插入和删除的操作,只做存取和修改的操作,所以我们选择 顺序存储结构。因为顺序存储结构在存取和修改时速度快(链式结构,在插入删除方面比较快) */ /* 数组的算法有: 初始化,销毁,存取,修改 */ #define ELEMTYPE int typedef struct { ELEMTYPE *elem;// 此处不能用静态数组。当定义结构体时就分配了内存 int m; int n; }Array; typedef Array* pArray; /*初始化数组,分配内存,设置属性*/ void initArray(Array* p, int m, int n) { if (m<1 || n<1) { cout<<"数组大小不合法"<<endl; return; } //p->elem = new ELEMTYPE[m][n];//cannot convert from 'int (*)[1]' to 'int *' p->elem = new ELEMTYPE[n*m];//需要把多维数组 转化为一维数组 p->m = m; p->n = n; } /*销毁数组,删除所分配的内存,并设置属性*/ void destroyArray(Array* p) { delete []p->elem; p->elem = NULL; p->m =0; p->n =0; } /*对数组进行存取操作*/ ELEMTYPE getElem(Array *p, int a, int b) { /*写算法第一步就是 检查参数列表中元素是否合法*/ if (a <0 || a>=p->m || b<0 || b >=p->n) { cout<<"存取时,参数不合法,请检查"<<endl; exit(0) ; } int off = a*p->n + b; ELEMTYPE x = p->elem[off]; return x; } /*修改数组元素*/ ELEMTYPE setElem(Array* p, int a, int b, ELEMTYPE x) { //写算法的第一步就是 检查参数是否合法 if (a<0 || a>=p->m || b<0 || b>=p->n) { cout<<"参数不合法,请检查"<<endl; exit(0); } int off = a*p->n + b; ELEMTYPE y= p->elem[off]; p->elem[off] = x; return y; } void main() { Array p; initArray(&p,2,10 ); ELEMTYPE x = 5; cout<<"在 elem[1][5] 设置存储值为 5"<<endl; setElem(&p, 1,5,x); ELEMTYPE y = getElem(&p , 1 ,5); cout<<"取出的元素值大小为 :"<<y <<endl; destroyArray(&p); }