终于自己写出了关于单链表的操作,而不是看别人的,现在编程越来越有感觉了,自己编更好,别人的还看不懂,不知道他们的思路是什么
单链表的建立,插入,删除,排序,求长度。插入是按大小顺序插入的。
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
node * next;
};
void creat(node * );
void print(node * );
int length(node *);
void insert(node *, int );
void del(node *, int);
void sort(node *,int);
void main()
{
node * head;
int val=0;
int lengt=0;
head =(node *)malloc(sizeof(node));
creat(head);
printf("输入的数据为\n");
print(head);
printf("%链表长度为:");
lengt=length(head);
printf("%d\n",lengt);
sort(head,lengt);
printf("排序后打印结果\n");
print(head);
printf("输入插入的数字");
scanf("%d",&val);
printf("val=%d\n",val);
insert(head,val);
printf("插入后打印结果\n");
print(head);
printf("输入删除的数字");
scanf("%d",&val);
del(head,val);
printf("删除后打印结果\n");
print(head);
}
void creat (node * head)
{
node * a=(node*) malloc(sizeof(node));
head->next=a;
printf("输入数字, 数字0结束\n");
scanf("%d",&a->data);
if(a->data==0)
{
a->next=NULL;
return ;
}
creat(a);
}
void sort(node* a,int len) //交换数据,而不是指针
{
node *p,*q;
int temp;
for(int i=0;i<len;i++)
{
p=a;
q=p->next;
while(q->next->data!=0)
{
if (p->next->data>q->next->data)
{
temp=p->next->data;
p->next->data=q->next->data;
q->next->data=temp;
}
p=p->next;
q=q->next;
}
}
}
void insert(node * a, int val) // 按大小顺序插入
{
node * p;
p=a;
node * b= (node *) malloc(sizeof(node));
while (p->next->data<val&& p->next->data!=0)
p=p->next;
b->next=p->next;
p->next=b;
b->data =val;
}
void del(node * a, int val)
{
node * p;
p=a;
while (p->next->data!=val)
{
if(p->next->data==0)
{
printf("没有找到此数\n");
return;
}
p=p->next;
}
p->next=p->next->next;
}
void print(node* a)
{
while (a->next!=NULL)
{
a=a->next;
if(a->next!=NULL)
printf("%d->",a->data);
}
printf("\n");
}
int length(node * a)
{
int n=0;
while(a->next!=NULL)
{
a=a->next;
n++;
}
n=n-1;
return n;
}
对于其他的数据结构就是struct的结果不同吧