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

数据结构——线性表的顺序存储结构C语言

2018-04-09 21:34 92 查看

线性表顺序存储结构是在存储空间中开辟出一块连续的存储空间用于存放数据。数据之间的关系在逻辑上连续的。即A1-A2-A3......An伪代码
typedef struct{
int length;
elemtype *data;
}list;

整型变量length 用于存储当前表长度,即表中数据数量,data指针用于指向,内存中连续的部分,elemtype即为存储的数据类型,可根据实际需要进行修改。

定义在线性表上的操作有,创建,删除,插入,查找,清空等。利用C库函数中的malloc,realloc,free函数可以实现对内存动态的分配。以达

到实现线性表的顺序存储结构的目的。C语言实现
#include<stdio.h>
#include<malloc.h>
#define elemtype int
#define maxlength 100
#define addlength 10
#define status int
#define ok 1
#define fail 0

typedef struct{
int length;
elemtype *data = NULL;

}linklist;

status initlist(linklist *l)                //创建一个空表
{
if(l->data != NULL )
return fail;
else
{
l->data = (elemtype*)malloc(maxlength*sizeof(int));
l->length = 0;
return ok;
}

}

status insertnode(linklist *l,int i,elemtype e)   //插入函数
{
int k;
if(i<=0 || i>l->length+1)            //如果插入位置不连续则失败
return fail;
if(l->length == 0 )
{    *l->data = e;
l->length ++;
}
else
{

for(k = l->length-1;k>=i-1;k--)
{
l->data[k+1] = l->data[k];
}

l->data[i-1] = e;
l->length++;
}
return ok;
}

status clearlist(linklist *l)              //清空表
{
free(l->data );
l->data = 	NULL;
l->length = 0;
return ok;

}

status getelem(linklist *l,int i,elemtype *e)      //查找函数
{
int k;
if(i<=0||i>l->length)
return fail;
else
{
*e = l->data[i-1];
return ok;
}

}

int main()
{
void fun();
fun();

return ok;

}

void fun()
{         int k;
int i;
elemtype e;
linklist l;
printf("线性表的顺序存储结构(最大表长100个整数)\n");
printf("---------------------------------------\n\n\n");
printf("0.退出程序");
printf("\n1.创建一个空的线性表");
printf("\n2.插入10个元素");
printf("\n3.查找在第i个位置的元素");
printf("\n4.清空一个线性表\n") ;
printf("5.当前表长\n\n");
while(scanf("%d",&i)&&i != 0)
{
switch(i)
{
case 1: k=initlist(&l);if(k)printf("\n成功创建!表长为%d 请继续操作\n",l.length);else printf("\n创建失败,请先清空当前表\n");break;
case 2: printf("\n请输入元素:");for(k = 0 ;k < 10;k++)
{
scanf("%d",&e);
insertnode(&l,k+1,e);
} printf("插入完毕,请继续操作\n");break;
case 3: printf("\n请输入查找的位置:");scanf("%d",&i),getelem(&l,i,&e);printf("\n 你的结果是%d 请继续操作\n",e);break;
case 4: clearlist(&l);printf("清空完毕,请重新创建线性表\n");break;
case 5: printf("当前表长为%d,请继续操作\n",l.length );break;
}
}

}

菜单编写比较简化,并没实现全部功能。运行实例

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