数据结构是专门研究数据存储的问题 。数据的存储包括两方面 个体的存储+个体关系的存储。算法是对存储数据的操作。
线性
连续存储【数组】
优点
存取速度很快
缺点
插入删除元素很慢 事先必须知道数组的长度 需要大块连续的内存块
数组的相关操作:
1 .数组的定义
//定义一个数组
struct Array{
int *parr;//指向数组的指针
int len;//数组所能容纳的最大元素的个数
int cnt;//数组的有效元素的个数
};
2.数组的创建
//初始化数组
void Init_array(struct Array *pArr, int length)
{
pArr->parr=(int *)malloc(sizeof(int)*length);
if (NULL==pArr->parr)
{
printf("内存分配失败");
exit(-1);//终止程序
}
else
{
pArr->cnt=0;
pArr->len=length;
}
return;//加return的目的是表明此函数已经写完了
}
3.打印输出
//将数组元素打印输出
void Show_array(struct Array *pArr)
{
if (Isempty(pArr))
{
printf("数组为空!\n");
}
else
{
for (int i=0; i<pArr->cnt; ++i)
{
printf("%d ",pArr->parr[i]);
}
printf("\n");
}
}
4.判断数组是否为空
//判断数组是否为空
bool Isempty(struct Array *pArr)
{
if (0==pArr->cnt)
{
return true;
}
else
{
return false;
}
}
5.判断数组是否为满
//判断数组是否为满
bool Isfull(struct Array *pArr)
{
if (pArr->cnt==pArr->len)
{
return true;
}
else
{
return false;
}
}
6.在数组后面追加元素
//在数组后面追加元素
void add_array(struct Array *pArr, int val)
{
if (Isfull(pArr))
{
printf("数组已满,无法追加元素!\n");
}
else
{
pArr->parr[pArr->cnt]=val;
pArr->cnt++;
}
return;
}
7.在数组的指定位置添加元素
//在数组的指定位置添加元素(pos=1,2,3,4.......,pos最大为数组中有效元素的个数)
bool Insert_array(struct Array *pArr,int pos, int val)
{
if (Isfull(pArr)||pos>pArr->cnt||pos<1)
{
return false;
}
else
{
for(int i=pArr->cnt-1; i>=pos-1; i--)
{
pArr->parr[i+1]=pArr->parr[i];
}
pArr->parr[pos-1]=val;
pArr->cnt++;
return true;
}
}
8.在数组的指定位置删除元素
//在数组的指定位置删除元素(pos=1,2,3,4.......,pos最大为数组中有效元素的个数)
bool Delete_array(struct Array *pArr,int pos)
{
if(Isempty(pArr)||pos>pArr->cnt||pos<1)
{
return false;
}
else
{
for (int i=pos; i<pArr->cnt; i++)
{
pArr->parr[i-1]=pArr->parr[i];
}
pArr->cnt--;
return true;
}
9.数组元素的倒置
//倒置数组中的元素
void Inverse_array(struct Array *pArr)
{
int i,j,temp;
if (Isempty(pArr))
{
return;
}
for (i=0,j=pArr->cnt-1;i<j;i++,j--)
{
temp=pArr->parr[i];
pArr->parr[i]=pArr->parr[j];
pArr->parr[j]=temp;
}
}
10.数组元素的排序
//选择排序
void Selectsort_array(struct Array *pArr)
{
int i,j,min,t;
for (i=0; i<pArr->cnt-1; i++)
{
min=i;
for (j=i+1; j<pArr->cnt; j++)
{
if (pArr->parr[j]<pArr->parr[min])
{
min=j;
}
}
t=pArr->parr[i];
pArr->parr[i]=pArr->parr[min];
pArr->parr[min]=t;
}
}
//冒泡排序
void BubbleSort_array(struct Array *pArr)
{
int i,j,temp;
for (i=0; i<pArr->cnt-1; i++)
{
for (j=0; j<pArr->cnt-1-i; j++)
{
if (pArr->parr[j+1]<pArr->parr[j])
{
temp=pArr->parr[j];
pArr->parr[j]=pArr->parr[j+1];
pArr->parr[j+1]=temp;
}
}
}
}
10.运行结果