您的位置:首页 > 编程语言 > C语言/C++

顺序线性表的基本操作(C语言实现)

2017-09-28 10:58 295 查看
//线性表顺序存储

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

typedef  struct{

int  *elem;      //elem表示存储空间的地址:

int   length;     //表示当前长度

int   listsize;    //当前分配的存储长度

}SqList;

//函数声明

void   InitList_Sq(SqList  *LI);    //线性表初始化

void   DestroyList(SqList  *LI);    //销毁线性表

void   ClearList(SqList  *LI  );      //将L置为空表

bool   ListEmpty(SqList  L);        //判断线性表是否为空

int     ListLength(SqList L);        //返回L中数据元素的个数

int     GetElem(SqList L,int i);      //返回第i个数据元素的值

//int  LocateElem(SqList L,int e,compare());

void   ListInsert(SqList  *LI ,int i,int e);     //在i的位置插入元素

int     ListDelete(SqList  *LI ,int i);   //删除线性表中第i个元素

void   ListTraverse(SqList L);                      //线性表遍历
//

//主函数

int main()

{

int val;

SqList  L;               //创建一个线性表

InitList_Sq(&L);      //对表进行初始化

ListInsert(&L ,1,18);

ListInsert(&L ,2,3);

ListInsert(&L ,3,5);

ListInsert(&L ,4,12);

ListInsert(&L ,5,33);

printf("它的长度为:%d\n",L.length);

ListTraverse(L);

val=ListDelete(&L,3);

ListTraverse(L);

return 0;

}

//线性表初始化实现

void   InitList_Sq(SqList  *LI)

{

int num;

printf("请输入存储容量大小:");

scanf("%d",&num);

LI->elem=(int *)malloc(num*sizeof(int));  //为线性表分配地址;

if(!(LI->elem))                                       //判断是否开辟空间
{
printf("系统分配内存失败!\n");
exit(-1);
}

LI->length=0;

LI->listsize=num;

return;

}

//销毁线性表算法

void   DestroyList(SqList  *LI)

{
free(LI);

}

//将线性表置为空表

void   ClearList(SqList  *LI)

{

LI->length=0;

return ;

}

//判断线性表是否为空

bool   ListEmpty(SqList  L)

{

if(L.length==0)
return true;

else{
return false;

}

}

//返回L中数据元素的个数

int     ListLength(SqList L)   

{

return (L.length);

}

//在i的位置插入元素e

void   ListInsert(SqList  *LI ,int i,int e)    

{

int  j,temp;

if((i>((LI->length)+1))||(i<0))
{

printf("插入失败!\n");

exit(-1);

}

else{

  temp=LI->elem[i-1];
LI->elem[i-1]=e;

 for(j=LI->length;j>i+1;j--)
{

 LI->elem[j]=LI->elem[j-1];

 LI->elem[i]=temp;

 }

(LI->length)++;

}

}

// 返回第i个数据元素的值

int  GetElem(SqList L,int i)

{

if((i>((L.length)+1))||(i<0))
{

printf("返回失败!\n");

exit(-1);

}

else{
return(L.elem[i-1]);

}

}

//顺序表的遍历

void   ListTraverse(SqList L)

{

int i;

printf("顺序表的遍历结果是:\n");

for(i=0;i<L.length;i++)

{

printf("%d\n",L.elem[i]);

}

}

//删除第i个元素,并返回删除的值

int   ListDelete(SqList  *LI ,int i)

{

int j,temp;

if((i>(LI->length))||(i<0))
{

printf("删除失败!\n");

exit(-1);

}

else{
temp=LI->elem[i-1];
for(j=i-1;j<LI->length-1;j++)
{
LI->elem[j]=LI->elem[j+1];
}

LI->length--;}

return  temp;

}

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