数据结构 单链表的定义及检索、插入、删除.遍历等算法的实现

数据结构 单链表的定义及检索、插入、删除.遍历等算法的实现
2025-05-05 19:57:19
推荐回答(1个)
回答1:

#include
#include "stdlib.h"
#define maxlen 50
typedef struct {

int data[maxlen];
int last;
}Sequenlist;

Sequenlist *SqLset(){ //建立表
Sequenlist *L;
int i;
L=(Sequenlist *)malloc(sizeof(Sequenlist));
L->last=-1;
printf("请输入长度");
scanf("%d",&i); //输入表长
if(i>0){
for(L->last=0;L->lastlast++)
scanf("%d",&L->data[L->last]);
L->last--;
}
return (L);
}
int SqLlength(Sequenlist*L) // 求表长
{
return ( L->last+1);
}
void SqLlocate(Sequenlist*L,int x){ //查找

int i,z=0;
for(i=0;i if(L->data[i]==x){

printf("%d",i+1);
z=1;
}if(z==0)
printf("%d",-1);
}
int SqLempty(Sequenlist*L) //判断表满
{

if( L->last+1>=maxlen)
return (1);
else return(0);
}
int SqLinsert(Sequenlist*L,int i,int x){ //插入数据

int j;
if(SqLempty(L)==1){

printf("overflow");
return(0);
}
else if ((i<1)||(i> L->last+2)){

printf("error");
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);
}
}
int SqLcr(Sequenlist*L,int x)
{ int i,j;

for(i=0;ilast+1;i++)
{
if(x<=L->data[i])
{
i++;
break;
}

}

j=SqLinsert(L,i,x);
return(1);
}

int SqLdelete(Sequenlist *L,int i){ //删除

int j;
if( L->last<0){ //表空
printf("顺序表空!");return (0);

}else if ((i<1)||(i> L->last+1)){
printf("i参数出错!");
return(0);}
else{

for(j=i;j<=L->last+1;j++)
L->data[j-1]=L->data[j];
L->last--;
return(1);
}
}

int SqL123(Sequenlist *M)
{
int i,j,z;

for(i=0;ilast+1;i++)
for(j=i+1;jlast+1;j++)
if(M->data[i]==M->data[j])
z=SqLdelete(M,j+1);

return(1);

}
main(){
int n; int x,i,j,k;
Sequenlist *M;
M=SqLset();
printf(" 表格管理\n");
printf("-------------------\n");
printf(" 1.查找\n");
printf(" 2.插入\n");
printf(" 3.删除\n");
printf(" 4.排序\n");
printf(" 5.删除相同的元素\n");
printf(" 0.退出\n");
printf("请选择0-5\n");

scanf("%d",&n);

switch(n){

case 1:printf("查找\n");
printf("请输入要查找的数");
scanf("%d",&x);
SqLlocate(M,x);
printf("\n");
break;

case 2:printf("插入\n");
printf("请输入要插入的数");
scanf("%d",&i);
printf("请输入要插入的位置");
scanf("%d",&x);
j=SqLinsert(M,x,i);
break;
case 3:printf("删除\n");
printf("请输入要删除 的位置");
scanf("%d",&i);
j=SqLdelete(M,i);

break;
case 0:printf("再见\n");
exit(0);

case 4: printf("请输入要插入的数:");
scanf("%d",&i);
j=SqLcr(M,i);
break;
case 5:
j=SqL123(M);
break;

}

for(k=0;k<=M->last; k++)

{printf("%4d",M->data[k]);}
printf("\n");

}