顺序线性表的定义与基本操作

来源:互联网 发布:淘宝卖家写给买家的话 编辑:程序博客网 时间:2024/06/12 04:59

动态分配顺序线性表的实现

#define LIST_INIT_SIZE 100//线性表的初始空间大小

#define LISTINCREMENT 10//线性表空间不足时每次增加分配的空间大小
typedef struct{
int *element;//数据元素
int length;//线性表长度
int listSize;//线性表空间大小

}Sq_List;//顺序线性表的定义

下面三个函数中的参数Sq_List &l,加了“&”,说明是引用类型,属于传址,因为希望形参的值可以改变

int initList_Sq(Sq_List &l) //线性表初始化
{
l.element=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!l.element) exit(1);//动态分配空间失败就退出
l.length=0;
l.listSize=LIST_INIT_SIZE;
return 0;
}


int insert_Sq(Sq_List &l,int i,int e)//顺序在线性表第i个元素之前插入一个元素
{
if(i<1||i>l.length+1)//插入的位置不合法
{
printf("插入的位置不合法");
return 0;
}
if(l.length>=l.listSize)//顺序线性表已满
{
l.element=(int *)realloc(l.element,(l.listSize+LISTINCREMENT)*sizeof(int));//增加存储容量
if(!l.element) exit(1);//动态分配空间失败就退出
        l.listSize+=LISTINCREMENT;
}
int j;
for(j=length-1;j>=i-1;j--)
{
l.element[j+1]=l.element[j];//线性表第i个元素后面(包括第i个元素)的元素都后移一位
}
l.element[i-1]=e;
l.length++;//线性表长度加1
return 0;
}


int delete_Sq(Sq_List &l,int i)//删除顺序线性表第i个元素
{
if(i<1||i>l.length)
{
printf("删除位置不合法");
return 0;
}
int j;
for(j=i;j<=l.length-1;j++)
{
l.element[j-1]=l.element[j];//线性表第i个元素后面(不包括第i个元素)的元素都前移一位
}
l.length--;//线性表长度减1
return 0;
}



0 0
原创粉丝点击