已知有一个含有5个元素的结构体数组,用于存放学生的数学成绩,每个元素中含有学生姓名,学号和成绩。
用一个双向链表,将学生成绩按高低进行连接,设计一个函数,输入链表中间节点的地址,输出其两侧的节点数据域信息。
#include<stdio.h>
struct stunode
{
char *name; /*数据域*/
char *studentno;
float score;
struct stunode *last,*next; //引用域
}stuarray[5]={
{"xiang yong","200901030001",95.5},
{"liu qiang","200901030002",92},
{"li cheng","200901030003",88},
{"meng qingtao","200901030004",89},
{"lin hui","200901030005",91.5}
}; //数据域赋值
int outputlistinfo(struct stunode *listheader) //链表函数输出信息
{
int i=0;
struct stunode *listnode=NULL;
if(listheader==NULL)
{
printf("错误:输入指数为NULL.\n");
return;
}
listnode=listheader; //接收输入节点
printf("\t开始处理函数outputlistinfo()\n");
printf("\t姓名\t\t学号\t\t成绩\n");
listnode=listheader->last; //遍历输入节点的前驱节点
printf("\t%s\t%s\t%f\n",listnode->name,listnode->studentno,listnode->score);
listnode=listheader->last->last; //遍历输入节点的前驱节点
printf("\t%s\t%s\t%f\n",listnode->name,listnode->studentno,listnode->score);
listnode=listheader->next; //遍历输入节点的前驱节点
printf("\t%s\t%s\t%f\n",listnode->name,listnode->studentno,listnode->score);
listnode=listheader->next->next; //遍历输入节点的前驱节点
}
int main()
{
struct stunode *header=NULL; //设置表头结点
header =&stuarray[0]; //构建链表
stuarray[0].next=&stuarray[1];
stuarray[0].last=&stuarray[0];
stuarray[1].next=&stuarray[4];
stuarray[1].last=&stuarray[0];
stuarray[4].next=&stuarray[3];
stuarray[4].last=&stuarray[1];
stuarray[3].next=&stuarray[2];
stuarray[3].last=&stuarray[4];
stuarray[2].next=NULL;
stuarray[2].last=&stuarray[3];
outputlistinfo(header); //调用函数,输入输出节点两侧的结点数据域信息
}