线性表的实现及操作

来源:互联网 发布:关系数据库教程 编辑:程序博客网 时间:2024/06/05 16:01

线性表的功能:

建立顺序表,打印顺序表,插入指定位置数据,删除指定位置数据,查找数据,清空顺序表只需将表长设为0即可。
#include"stdio.h"
#include<malloc.h>
# define n 1024//自定义存储空间的大小 
typedef struct
{ int a[n]; //数组存储线性数据
int length; //数组长度
}list;
//建立线性表
void creatlist(list * l){
int i,j,k;
printf("请输入数据的个数:\n");
scanf("%d",&j);
for(i=0;i<j;i++){
printf("a[%d]=",i);
scanf("%d",&k);
l->a[i]=k;
}

l->length=j;
}
//打印线性表
void print(list *l){
int i;
for(i=0;i<l->length;i++){
printf("%d\n",l->a[i]);
}
}
//插入数据
int insert(list *l ,int i,int date){
int j;
if(l->length==n){
printf("线性表满");
return 0;}
if(i<1||i>l->length){
printf("i的位置不对");
return 0;
}
else{
for( j=l->length;j>=i;j--)//i后面元素都往后移动一位,先移动最后的元素
{
l->a[j]=l->a[j-1];
}
l->a[i-1]=date;
l->length++;
}
return 1;
}
//删除元素
int delet(list *l,int i){
int j;
if((i<1) || (i>l->length))
{ printf("删除位置错误,输入正确删除位置:\n");
return 0;
}

else{
for( j=i;j<l->length;j++)/*i后面的每个元素都往前移动 一位*/
{
l->a[j-1]=l->a[j];
}
l->length--;
}
return 1;
}
//查找元素
int chazhao(list *l, int date){
int i;
if(l->length==0)
{printf("顺序表是空的");
return 0;
}
else{

for( i=0;i<l->length;i++){
if(l->a[i]==date)
return i+1;
}

}


}
int main(){
list * l;
char c;
int e;
int ii,ch;

l=(list *)malloc(sizeof(list));//指针使用前要初始化
creatlist(l);
print(l);
do{

printf("i ***插入\n");
printf("d ***删除\n");
printf("k ***查找\n");
printf("q ***退出\n");
printf("请选择:\n");
do{
fflush(stdin);//清除键盘缓冲区,该函数要写,否则可能会引起无法输入字符c
scanf("%c",&c);
}while((c!='i')&&(c!='d')&&(c!='q')&&(c!='k'));
switch(c){
case 'i':
printf("输入插入的数据:");
scanf("%d",&e);
printf("输入要插入的位置:");
scanf("%d",&ii);
insert(l,ii,e);
print(l);
break;
case'd':
printf("请输入删除的位置:");
scanf("%d",&ii);
if(delet(l,ii))
print(l);

break;
case'k':

printf("请输入查找的数据:");
scanf("%d",&ch);
printf("数据的位置是:%d\n",chazhao(l,ch));
break;
}
}while(c!='q');

}
原创粉丝点击