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

线性表顺序存储结构实现(线性表-数据结构作业)

2016-04-14 11:17 218 查看
#include<stdio.h>
#define MAXSIZE 20

typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE];
int length;
}SqList;

void InitList(SqList *L)
{
L->length=5;
int i;
for(i=0;i<5;i++)
{
L->data[i]=i+1;
}
return;
}
int ListLength(SqList L)
{
return L.length;
}
bool ListEmpty(SqList L)
{
if(L.length==0)return false;
else return true;
}

void ClearList(SqList *L)
{
L->length=0;
return;
}

bool GetElem(SqList L,int i,int *e)
{
if(i==0||i>L.length||L.length==0)return false;
else
{
*e=L.data[i-1];
return true;
}
}
int LocateElem(SqList L,int e)
{
int i;
if(L.length==0)return 0;
else{
for(i=0;i<L.length;i++)
{
if(L.data[i]==e)
{
return i+1;
break;
}
else if(i==L.length-1&&L.data[L.length-1]!=e)
{
return 0;
break;
}
}}
}
bool ListInsert(SqList *L,int i,int e)
{
if(i<=0||i>L->length+1||L->length==MAXSIZE)return false;
else {
//插入数据位置不在表尾
if(i<=L->length){
int k;
for(k=L->length-1;k>=i-1;k--)
{
L->data[k+1]=L->data[k];
}}
L->data[i-1]=e;
L->length++;
return true;
}
}
void PrintList(SqList L)
{
int i;
for(i=0;i<L.length;i++)
{
printf("%d ",L.data[i]);
}
printf("\n");
return;
}
bool ListDelete(SqList *L,int i,int *e)
{
if(L->length==0||i<=0||i>L->length)return false;
else
{
*e=L->data[i-1];
if(i<L->length)//删除位置不在表尾
{
int k;
for(k=i;k<L->length;k++)
{
L->data[k-1]=L->data[k];
}
}
L->length--;
return true;
}

}
int main()
{
SqList L;
//初始化
InitList(&L);
//判断是否为空
if(ListEmpty(L))printf("非空\n");
else printf("空\n");
//读取顺序表中元素个数
printf("顺序表中元素个数为%d\n",ListLength(L));
//读取
int i,e;
printf("请输入您要读取的数字序号:");
scanf("%d",&i);
if(GetElem(L,i,&e))
printf("第%d个元素是%d\n",i,e);
else if(!GetElem(L,i,&e))
printf("发生错误请重新输入\n");
//查找
printf("请输入您要查找的数字:");
scanf("%d",&e);
if(LocateElem(L,e)!=0)printf("您查找的数字序号为%d\n",LocateElem(L,e));
else printf("您查找的数字不存在\n");
//插入
printf("请输入您要插入的数字:");
scanf("%d",&e);
printf("请输入您要插入的位置:");
scanf("%d",&i);
ListInsert(&L,i,e);
printf("插入后的顺序表如下:\n");
PrintList(L);
//删除
printf("请输入您要删除的数字位置:");
scanf("%d",&i);
ListDelete(&L,i,&e);
printf("您删除的数字为%d\n",e);
printf("删除后的顺序表如下:\n");
PrintList(L);
//清空
ClearList(&L);
//判断是否为空
if(ListEmpty(L))printf("非空\n");
else printf("空\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: