您的位置:首页 > 理论基础 > 数据结构算法

数据结构--线性表顺序实现

2015-01-06 13:49 176 查看
主要参考严老师那本教材:

#include <stdio.h>
#include <malloc.h>
#define LIST_INIT_SIZE 100//线性表存储空间初始分配量
#define LISTINCREMENT 10//空间不够时,增量分配
#define ElemType int
typedef struct
{
ElemType *elem;//当前分配的存储空间基址
int length;//当前长度------说明一般length<=listsize
int listsize;//当前分配的存储空间容量(以元素个数为单位,即sizeof(ElemType)为单位
}sqList;

//初始化线性表,主要是分配存储空间
int initSqList(sqList *l)
{
if(NULL==l)
return 0;//失败
else
{
l->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(NULL==l->elem)
return 0;//失败
l->length=0;
l->listsize=LIST_INIT_SIZE;
return 1;
}
return 1;
}

//在线性表某个位置(前)插入一个节点,pos范围:0----l->length
int insertElem(sqList *l,int pos,ElemType e)
{
if(NULL==l)
return 0;
if(pos<0 || pos>l->length)
return 0;
//空间不足,增量分配
if(l->length==l->listsize)
{
ElemType *newbase=NULL;
newbase=(ElemType *)realloc(l->elem,sizeof(ElemType)*(l->listsize+ LISTINCREMENT));
if(!newbase)
return 0;//分配失败
l->listsize+=LISTINCREMENT;
l->elem=newbase;
}

//移动数据,腾出位置
int j;
for (j=l->length; j>=pos+1; j--)
(l->elem)[j]=(l->elem)[j-1];

//插入新元素
(l->elem)[j]=e;
l->length++;
return 1;//成功
}

//在线性表某个位置删除一个节点,并且用*e返回其值,pos范围:0----l->length-1
int deleteElem(sqList *l,int pos,ElemType *e)
{
if(NULL==l)
return 0;
if(pos<0 || pos>=l->length)
return 0;
*e=(l->elem)[pos];
for (int i=pos; i<=l->length-2; i++)
(l->elem)[i]=(l->elem)[i+1];
l->length--;
return 1;
}

//找值等于e的某个元素,返回其位置0---l->length-1
int searchByElem(sqList *l,ElemType e)
{
if(NULL==l)
return 0;
for (int i=0; i<l->length; i++)
{
if(e==(l->elem)[i])
return i;//找到,返回位置
}
return -1;//未找到
}

int searchByIndex(sqList *l,int pos,ElemType *e)
{
if(NULL==l)
return 0;
if(pos<0 || pos>=l->length)
return 0;//查找失败
else
*e=l->elem[pos];
return 1;
}

void printSqList(sqList *l)
{
if(NULL==l)
return ;
for (int i=0; i<l->length; i++)
{
printf("%d ",(l->elem)[i]);
}
printf("\n");
}

int main()
{
sqList mylist1;
initSqList(&mylist1);
insertElem(&mylist1,0,5);
insertElem(&mylist1,0,4);
insertElem(&mylist1,0,3);
insertElem(&mylist1,0,2);
insertElem(&mylist1,0,1);
printSqList(&mylist1);

ElemType tmp;
deleteElem(&mylist1,2,&tmp);
printSqList(&mylist1);
printf("%d\n",tmp);

searchByIndex(&mylist1,1,&tmp);
printf("index:1,val:%d\n",tmp);
int pos=searchByElem(&mylist1,5);
printf("5'pos: %d\n",pos);
return 0;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息