这个是我以前写的,,没有注释,,包括数组的创建,排序,删除,插入,,,
其实还少一个保存数据文件和载入 也就是save();load();应该很好写的,,,
你可以参考一下相应的函数,,
这是代码:
#include
#include
typedef struct p{ int a; p *next;}P;
P* create();
void show(P *h);
P* paixu(P *h);
P* insert(P *h);
P* search(P *h,int s);
P* dele(P *h);
void fre(P *h);
int main()
{
P *head;
head=create();
show(head);
head=paixu(head);
show(head);
head=dele(head);
show(head);
head=insert(head);
show(head);
puts("按任意键继续。。。。");
getchar();
fre(head);
return 0;
}
P* create()
{
int i;
puts("请问你想创建几个数据的链表,请输入数字:");
scanf("%d",&i);
P *h,*e,*p;
p=(P *)malloc(sizeof(P));
h=p;
e=p;
int j=0;
while(j {
printf("请输入第 %d 个数据 :\n",j+1);
p=(P *)malloc(sizeof(P));
scanf("%d",&p->a);
e->next=p;
e=p;
j++;
}
e->next=NULL;
return h;
}
void show(P *h)
{
P *p;
p=h->next;
while(p!=NULL)
{
printf("%-10d",p->a);
p=p->next;
}
puts("");
}
P* paixu(P *h) //从大往小排序
{
P *p1,*p2,*p3,*p;
int flag=0; //标志 0的是说明排序还没完成
while(flag!=1)
{
p1=h;
p2=p1->next;
p3=p2->next;
while(p3!=NULL)
{
if((p2->a)<(p3->a))
{
p=p2;
p2=p3;
p3=p;
p1->next=p2;
p=p2->next;
p2->next=p3;
p3->next=p;
}
p1=p2;
p2=p3;
p3=p3->next;
}
p1=h;
p2=p1->next;
while(1)
{
p1=p2;
p2=p2->next;
if((p1->a)<(p2->a))
{flag=0;break;}
if(p2->next==NULL)
{ flag=1; break;}
}
}
return h;
}
P* insert(P *h)
{
int i;
puts("请输入你想插入的数:");
scanf("%d",&i);
P *in=(P *)malloc(sizeof(P));
in->a=i;
P *p1,*p2;
p1=h;
p2=p1->next;
while(p2!=NULL)
{
if((in->a)>(p2->a))
{
p1->next=in;
in->next=p2;
break;
}
p1=p2;
p2=p2->next;
}
if(p2=NULL)
{
p1->next=in;
in->next=NULL;
}
return h;
}
P* search(P *h,int d)
{
P *p;
p=h->next;
while(p!=NULL)
{
if((p->a)==d) break;
else
p=p->next;
}
return p;
}
P* dele(P *h)
{
int d;
puts("请输入你想删除的数:");
scanf("%d",&d);
P *p1,*p2;
p2=search(h,d);
p1=h;
while(p1->next!=p2)
{
p1=p1->next;
}
p1->next=p2->next;
free(p2);
return h;
}
void fre(P *h)
{
P *p1=h,*p2=h->next;
while(p2!=NULL)
{
free(p1);
p1=p2;
p2=p2->next;
}
}