高手帮帮忙啊,数据结构方面的,要求用c语言的

2024-11-22 23:35:16
推荐回答(1个)
回答1:

简单点说吧!定义个点链表节点模板!属性:学校、学生姓名、性别、、参赛项目、名次、得分。3个子函数。1输入选手信息(报名信息)。2输入选手得分信息。3、统计单项成绩并输出。4统计学校得分!5统计学校总分按学校得分输出排名!
按照节点的某一信息进行统计不难!关键是如何按照高分低分进行排列节点!可以选择把节点的信息放进中间节点交换节点所有数据!当然本人不提倡效率低耗内存大!
#include
#include
//定义单链表类型
typedef struct node
{
int data;
struct node *next;
}lnode;
lnode *create_t()
{
lnode *h,*p,*t;

int i;

h = (lnode *)malloc(sizeof(lnode));
h->data=0;
h->next=NULL;
t = h;

for(i=1;i<11;i++)
{

p=(lnode *)malloc(sizeof(lnode));
p->data=i+30;
p->next=NULL;
t->next=p;
t=p;
}

return h;
}
//显示单链表函数
void display(lnode *h)
{
lnode *t;
t=h->next;
while(t != NULL)
{
printf("%d %p \n",t->data,t->next);
t = t->next;
}
printf("\n\n");
}
//按照链表结点data值大小对结点进行交换排序
void move(lnode *h)
{
lnode *p,*t,*q;
int i;

for( i = 0; i < 10; i++ )
{
q=h;

while(1)
{
p = q->next;
if(p->next==NULL) break;
t = p->next;

if( p->data < t->data )
{
q->next = t;
p->next = t->next;
t->next = p;
}
q=q->next;
}
}
}
void main()
{

lnode *h;
h=create_t();
display(h);

move(h);
display(h);
}
这是我做评委评分时候按最后得分对节点排序的试验品。。用3个指针通过改变指针直接交换节点。使前后节点按照大小关系交换。然后指针向后推移!!去参照着试试!你要求的挺多的!!思路就这样!建议先写流程按照流程分模块编写!