这个是我以前写的,,没有注释,,包括数组的创建,排序,删除,插入,,,
其实还少一个保存数据文件和载入 也就是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;
}
}
这是我调试运行的结果,,
#include
#include//有的编译器不识别malloc,要是不识别加上这个头文件
struct student //定义学生类结构体
{
char name[20]; //姓名
int score; //成绩
int rank; //名次
};
void main()
{
int n = 0; //人数
do{
scanf("%d",&n);
if(n>=0&&n<=100)
break;
else
printf("输入人数有误");
}while(1); //防输错,若输入有错,会一直重新输入
struct student * st = (struct student *)malloc(
n * sizeof(struct student) ); //开辟空间
int i,j,t;
printf("请按顺序输入学生姓名和成绩:\n");
for(i=0;i{
scanf("%s %d",st[i].name,&st[i].score);
}
for(i=0;ifor(j=0;j if(st[j].score {
t=st[j].score;
st[j].score=st[j+1].score;
st[j+1].score=t;
}
for(i = 0;i < n;i ++) //排名次
{
if(i = 0)
st[i].rank = 1; //第一名
else if(st[i].score = st[i-1].score)
st[i].rank = st[i-1].rank; //并列名次设定
else
st[i].rank = i+1;
}
printf("名次\t\t姓名\t\t成绩\n"); //输出
for(i=0;iprintf("%d\t\t%s\t\t%d\n",st[i].rank,st[i].name,st[i].score);
free(st); //亲,不要忘了释放空间哦~~
}
这个是我之前帮别人写的简单的成绩排名,使用了malloc和free来定义和释放一个结构体数组, 希望可以帮到你,注释都加上了,应该很好理解的~~~请采纳哦亲~~~
这个程序应该就可以吧..改一下变量基本就符合要求呀