线性表的顺序存储结构定义和基本操作算法实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/************线性表的顺序存储结构定义和基本操作算法实现************/ #include "stdio.h"
/***********************线性表的顺序存储结构定义*******************/ #define MAX 11 /*线性表可能达到的最大长度值*/ typedef int datatype;
typedef struct
{datatype data[MAX];
int last;}list;
/************************1.线性表的初始化***************************/ void init(list *lp)
{lp->last=0;}
/************************2.求线性表的长度***************************/ int length(list *lp)
{ return (lp->last);}
/***************3.插入运算,在表第i个位置插入一个值为x的新元素******/ void insert(list *lp,int i,datatype x)
{ int j;
if(lp->last==MAX-1)
printf("Overflow!\n"); /*表已满*/
else if(i<1||i>lp->last+1)
printf("Error!\n"); /*插入位置错误*/
else
{for(j=lp->last;j>=i;j--)
lp->data[j+1]=lp->data[j]; /*数据元素后移*/
lp->data[i]=x; /*插入x */
lp->last++; /*表长度加1*/
}
}
/***************4.删除运算,在表中删除第i个数据元素***************/ void delete(list *lp,int i)
{ int j;
if(i<1||i>lp->last) /*检查空表及删除位置的合法性*/ printf("The %dth element is not exist!",i); /*不存在第i个元素*/
else
{for(j=i+1;j<=lp->last;j++)
lp->data[j-1]=lp->data[j]; /*向前移动元素*/
lp->last--; /*表长度减1 */
}
}
/*****************5.查找运算,在表中查找x数据元素*****************/
int locate(list *lp,datatype x)
{ int i=lp->last;
while(i>0 && lp->data[i]!=x)i--;
return i;
}
/*int locate(list *lp,datatype x)
{int i=1;
while( i<=lp->last && lp->data[i]!=x ) i++;
if(i<=lp->last) return i; /*返回i下标,即元素位置*/
/* else return 0;
} */
/*******************主函数调用线性表操作算法函数****************/
main()
{
list lst;
int i,x,c;
while(1)
{printf("\n\n");
printf("1-init\n");
printf("2-length\n");
printf("3-insert\n");
printf("4-delete\n");
printf("5-locate\n");
printf("0-exit\n");
printf("Please enter your selection:");
scanf("%d",&c);
switch(c)
{case 1:init(&lst);break;
case 2:length(&lst);break;
case 3:printf("Please input i and x:");scanf("%d%d",&i,&x);insert(&lst,i,x);break;
case 4:printf("Please input i :");scanf("%d",&i);delete(&lst,i);break;
case 5:printf("Please input x:");scanf("%d",&x);if(locate(&lst,x))printf("\nLocation is %d\n",locate(&lst,x));else printf("Not found!\n");break;
case 0:exit(1);
}
printf("Data elements of the linear list is:"); /*输出线性表数据元素*/
for(i=1;i<=st;i++)
printf("%d ",lst.data[i]);
printf("\nLength of the linear list is:"); /*输出线性表长度*/
printf("%d\n",st);
}
}