1创建带头结点单链表A,依次从键盘输入5名学生的姓名、成绩并插入到单链表A中,输出并显示(数据结构

1创建带头结点单链表A,依次从键盘输入5名学生的姓名、成绩并插入到单链表A中,输出并显示(数据结构)急等

第1个回答  2013-05-07
/*你没指定语言,就用C语言给你写了一个*/
/*我这里没有C的编译器,是用记事本写的,如果有错误请把错误代码告诉我*/

/*宏定义名字的最大长度*/
#define Name_MAX 20

/*定义单项链表的节点结构体Node*/
typedef struct node
{
char name[Name_MAX];
int score;
struct node *next;
}Node;

/*从指定节点开始打印链表内容*/
void printFrom(Node *from)
{
int i = 0;
Node *p = from;
while(p->next != NULL)
{
printf("Node%d: Name:%s Score:%d\n", i+1, p->name, p->score);
p=p->next;
}
}

/*主函数:创建链表、输入5名学生信息并插入链表、输出链表数据*/
void main()
{
int i = 0;
Node *head, *temp, *tail;

/*初始化头节点*/
head = (Node *)malloc(sizeof(Node));
head->name = "This is HEAD";

/*初始化尾节点*/
tail = head;

while(i++ < 5)
{
/*创建新的学生节点*/
temp = (Node *)malloc(sizeof(Node));
/*从键盘扫瞄信息并赋给节点,输入格式:姓名[空格]成绩*/
scanf("%s %d", temp->name, temp->score);
/*将节点添加到链表尾部*/
tail->next = temp;
/*更新尾节点*/
tail=tail->next;
}
/*从第一个学生节点开始,打印链表*/
printf("Linklist as follow:\n");
printFrom(head->next);
getch();
}追问

数据结构期中考试_上机
11通信
1、创建带头结点单链表A,依次从键盘输入5名学生的姓名、成绩并插入到单链表A中,输出并显示;
2、利用原结点空间,对单链表A按学生成绩递增有序的顺序进行就地排序,输出显示排序后的单链表A。

追答

第二问添加以下2个方法:
/*交换两个学生节点的数据*/
void Exchange(Node *a, Node *b)
{
char tempName[Name_MAX] = a->name;
int tempScore = a->score;

a->name = b->name;
a->score = b->score;

b->name = tempName;
b->score = tempScore;
}
/*排序方法*/
void Sort(Node *head)
{
Node *p = head;
Node *index, *min;
while(1)
{
if(p->next == NULL)
break;
else
{
index = p->next;
while(1)
{
if(index->score score)
min = index;
if(index->next == NULL)
break;
else
index = index->next;
}
if(p->score != min->score)
Exchange(p, min);
p = p->next;
}
}


!!!另外刚才的回答中我发现一个缺陷,请将下面的方法替换原方法
/*从指定节点开始打印链表内容*/
void printFrom(Node *from)
{
int i = 0;
Node *p = from;

while(1)
{
printf("Node%d: Name:%s Score:%d\n", ++i, p->name, p->score);
if(p->next != NULL)
p=p->next;
else
break;
}
}

/*main中如果需要排序就使用
sort(head);
*/

========================
哥们不好意思,记事本写程序不容易,这几分钟内我改了好几个地方,上面这个是最新版了,请确认你是不是用了之前的版本

相似回答