设计一个通讯录,用顺序存储结构进行存储,设计出生成线性表,在第I个结点位置插入结点,删除第I个结点,打印表中结点的算法
1条回答 默认 最新
- 饭小粒 2017-07-30 02:53关注
#include
typedef char datatype ;
#define maxsize 1000
typedef struct
{ datatype data[maxsize] ; /*定义线性表为一个向量*/
int last;
} sequenlist ;
/* 插入函数*/
int insert(sequenlist L,char x,int i) /将新结点X插入到表L的第I个位置*/
/*L为指向线性表sequenlist类型的指针变量*/
{ int j ;
if ((*L).last= = maxsize-1)
{ printf(“overflow\n”) ;
return 0;
}
else
if ((i(*L).last+1))
{ printf(“error\n”) ; /* 非法位置*/
return 0 ;
}
else
{ for (j=(*L).last ; j>=i-1 ; j- -)
(*L).data[j+1]= (*L).data[j] ;
(*L).data[i-1]= x ;
(*L).last = (*L).last +1 ;
}
return (1) }/* 删除函数*/ /*从表中删除第I个结点*/
int delete (sequenlist L, int i)
{
int j ;
if ((i(*L).last+1) / 非法位置*/
{ printf(“error\n”) ;
return 0 ;
}
else
{ for ( j=i ; j<= (*L).last ; j++)
(*L).data[j-1]= (*L).data[j] ;
(*L).last = (*L).last -1 ;
}
return (1) }/* 生成线性表*/
void creatlist (sequenlist L )
{ int i ,j,n ;
printf (“ input data\n” ) /输入N个数据*/
scanf(“%d”,&n) ;
for ( i=0 ;L=data;i<n ; L++,i++)
{ printf (“ data[%d]=”, i )
scanf(“%c”,(*L).data[i]) ;
}
(*L).last=n-1 ;
printf (“\n”);
}/* 输出线性表*/
printout (sequenlist *L)
{ int i;
for ( i=0 ; i< (*L).last ; i++)
{ printf (“ data[%d]=”, i )
printf (“ %c ”, *L.data[i] ) ;
}
}
main ()
{ sequenlist *L;
char cmd ,x;
int i , s;
L= sequenlist;
creatlist ( L ) ;
clrscr();
printf(“ i , I -----------插入\n”) ;
printf(“ d , D -----------删除\n”) ;
printf(“ q , Q -----------退出\n”) ;
do
{ do
{ cmd=getchar() ;
}
while (( cmd!=’d’ )&& (cmd!=’D’ )&& (cmd!=’I’ )&& (cmd!=’i’ )&&(cmd!=’q’) &&(cmd!=’Q’)) ;
switch (cmd)
{ case ‘i’ :
case ’I’ : {
scanf(“%c”,&x) ;
scanf(“%d”,&i) ;
insert(L,x,i);
printout (L) ;
break ;
}
case ‘d’ :
case ’D’ : {
scanf(“%d”,&i) ;
delete(L , i);
printout (L) ;
break ;
}
}
} while ( (cmd!=’q’) || (cmd!=’Q’))
}解决 无用评论 打赏 举报