线性表及其实现-顺序存储(数组篇)
整个最关键的就是这句话: “利用数组的连续存储空间顺序存放线性表的各元素”
//线性表的顺序存储实现
typedef struct listnode *list;//typedef是预定义关键字,相当于类型重命名,起个简单的名字,这里就是用List表示struct LNode结构体指针
struct listnode{
int data[maxsize]; //定义一个数组 存int类型数据
int last;//last 线性表的长度 last 存进去的元素的长度 要小于等于 数组的大小
};
struct listnode l; //定义一个 struct listnode类型的变量 l
list ptrl; //list ptrl;相当于 struct listnode *ptrl; 结构体指针
//线性表的主要操作的实现
//1.初始化(建立空的顺序表)
list makeempty()
{
list ptrl; //定义一个结构体类型的变量 ptrl 其实就是 头指针
ptrl = (list) malloc(sizeof(struct listnode)); //动态申请储存空间
ptrl->last = -1;//因为还没有元素存进去
return ptrl; //返回头指针
}
// 查找元素 操作的实现
int find (int X,list ptrl ) //
{ int i;
for(i=0;i<=ptrl->last&&ptrl->data[i]!=X)
if(i>ptrl->last) return -1; /* 如果没找到,返回-1 */
else return i; //找到了就返回该元素的下标。
}
//插入操作的实现 (将元素放进数组)
void insert(int X;int i;list ptrl)//代插入元素是X,插入位置是i;
{
int j;
if(ptrl->last==maxsize){/* 表空间已满,不能插入*/
printf("表满了")
return;
}
if(i<1||i>ptrl->last+2/*防止空间的浪费*/){
printf("位置不合法");
return;
}
for(j=ptrl->last;j>=i-1;j--)///在数组中插入元素要先把元素往后移动,腾出位置来
{
ptrl->data[j+1]=prtl->data[j];
}
ptrl->data[i-1]=X;//为什么是i-1;因为 下标从0开始计算;第i个元素的下标是i-i;
ptrL->last++; //添加了一个元素进去,所以线性表长度要加1;
return;
}
//删除操作的实现 (删除数组中的元素)
void delete( int i;list ptrl)
{
int j;
if( i < 1 || i > ptrL->last+1 ) {
printf (“不存在第%d个元素”, i );
}
for ( j = i; j <= ptrL->last; j++ ){
ptrL->data[j-1] = ptrL->data[j];/*将 ai+1~ an顺序向前移动*/
}
ptrL->last--; /*Last仍指向最后元素*/
return;
}