链表基本操作练习(C语言)

2025-04-07 09:43:32
推荐回答(1个)
回答1:

说真的,你的分数太少了.当我弄了一半的时候才觉得有点不值,但又不想半途而废,最终还是帮你做了,所以希望你能及时采纳,这可是我弄了好久的呀!
好了,最后还帮你修改了一遍,已经编译通过的了.并且检查过可以完成你说的功能的了.
#include
#include
typedef struct list
{
int num;struct lst *next;
} LST;
LST *mycreat()
{
int data=0;
LST *head=NULL,*p=NULL,*q=NULL;
head=(LST*)malloc(sizeof(LST));
q=head;
printf("请输入链表数据(整型)并以空格空开,以-1为最后一个数,回车结尾:\n");
scanf("%d",&data);
while(data!=-1)
{
p=(LST*)malloc(sizeof(LST));
q->next=p;
p->num=data;
q=p;
scanf("%d",&data);
}
q->next=NULL;
return head;
}
void mycheck(LST *head)
{
int i=0,x=0;
LST *p=NULL;
printf("\n请输入要查询的结点:\n");
scanf("%d",&x);
p=head;
while(p!=NULL)
if(i!=x)
{
p=p->next;
i++;
}
else break;
if(p!=NULL)printf("\nthe %d node is %d\n",x,p->num);
else printf("\n there is no this node\n");

}
int mydelete (LST* head,int m)
{
LST *p=NULL,*q=NULL;
q=head;
p=head->next;
while(p!=NULL)
if(m!=p->num)
{
q=q->next;
p=p->next;
}
else break;
if(p==NULL) return 0;
q->next=p->next;
free(p);
return 1;
}
void myprint(LST *head)
{
LST *p=NULL;
p=head->next;
if(p==NULL)printf("\n empty list!");
else
do
{
printf("\n%5d\n",p->num);
p=p->next;

}while(p!=NULL);
printf("\n");
}
int thelength(LST *head)
{
int length=0;
LST *p=NULL;
p=head;
while(p!=NULL)
{
p=p->next;
length++;
}
return length;
}
void clear(LST *head)
{

LST *p=NULL;
p=head;
while(p->next!=NULL)
{
p=p->next;
p->num=0;
}
}
main()
{
int k=0,m=0,l=0;
LST *head=NULL;
head=mycreat();
mycheck(head);
printf("to delete list:");
scanf("%d",&m);
k=mydelete(head,m);
if(k==1)
{
printf("after deleting");
myprint(head);

}
else printf("not exist.\n");
l=thelength(head);
printf("the length is %d",l);
clear(head);

}