单链表的基本操作 程序实现

2024-11-22 10:13:25
推荐回答(1个)
回答1:

#include
#include

struct node
{
int num;
struct node *next;
};
/*建立链表*/
struct node *creat(int n)
{
int x, i;
struct node *head, *p, *r;

head=(struct node*)malloc(sizeof(struct node));
r=head;
printf("请输入数字\r\n");
for(i=0; i {
scanf("%d", &x);
p=(struct node*)malloc(sizeof(struct node));
p->num=x;
r->next=p;
r=p;
}
r->next=NULL;
return(head);
}
/*删除重复结点*/
void delet(struct node *head)
{
struct node *p, *q, *r;

p=head->next;
while(p!=NULL)
{
q=p;
while(q->next!=NULL)
{
r=q->next;
if(r->num==p->num)
{
if(r->next!=NULL)
{
q->next=r->next;
free(r);
}
else
{
q->next=NULL;
free(r);
}
}
else
{
q=r;
}
}
p=p->next;
}
}
/*排序*/
void sort(struct node *head)
{
struct node *p, *q, *small;
int temp;

for(p=head->next; p->next!=NULL; p=p->next)
{
small=p;
for(q=p->next; q!=NULL ;q=q->next)
{
if(q->numnum)
small=q;
}
if(small!=p)
{
temp=small->num;
small->num=p->num;
p->num=temp;
}
}
}
/*输出*/
void output(struct node *head)
{
struct node *pt;
pt=head->next;
while(pt!=NULL)
{
printf("%d\r\n", pt->num);
pt=pt->next;
}
}
void destroy(Node* head)
{
while (head)
{
Node* temp = head;
head = head->pstnext;
free(temp);
}
}

main()
{
int n;
struct node *head;

printf("输入数字的个数n\r\n");
scanf("%d", &n);
head=creat(n);

printf("输入的数字\r\n");
output(head);

delet(head);
printf("删除重复结点后输出数字\r\n");
output(head);

sort(head);
printf("排序后输出数字\r\n");
output(head);

destroy(head);
}
给你一个我的程序,大家一起进步!!!祝你学习快乐!!!