脑子瓦特了。。。。
啥也不是
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int num;
int score;
struct Node* next;
}Node,*Linklist;
//头插法
Linklist creatH() {
Node* L;
L = (Node*)malloc(sizeof(Node));
L->next = NULL;
/*Node* r;
r = L;*/
int num;//学号
int score;//成绩
while (scanf_s("%d%d", &num, &score))
{
Node* p;
p = (Node*)malloc(sizeof(Node));
p->num = num;
p->score = score;
p->next = L->next;
L->next = p;
}
return L;
}
//尾插法
Linklist creatT() {
Node* L;
L = (Node*)malloc(sizeof(Node));
L->next = NULL;
Node* r;
r = L;
int num;//学号
int score;//成绩
while (scanf_s("%d%d",&num,&score))
{
Node* p;
p = (Node*)malloc(sizeof(Node));
p->num = num;
p->score = score;
r->next = p;
r = p;
}
r->next = NULL;
return L;
}
//尾插法 输入元素的次数
Linklist creatT_Num(int time) {
Node* L;
L = (Node*)malloc(sizeof(Node));
L->next = NULL;
Node* r;
r = L;
int num;//学号
int score;//成绩
int i = 0;
while (scanf_s("%d%d", &num, &score))
{
i++;
Node* p;
p = (Node*)malloc(sizeof(Node));
p->num = num;
p->score = score;
r->next = p;
r = p;
if (i == time) {
break;
}
}
r->next = NULL;
return L;
}
//链表内容的修改,再链表中修改值为x的元素变为为k。
//修改学號为x同学对应的成绩k,
Linklist replace(Linklist L, int num, int score) {
Node* p;
p = (Node*)malloc(sizeof(Node));
p = L->next;
while (p)
{
if (p->num == num)
{
p->score = score;
}
p = p->next;
}
return L;
}
//单链表的插入,在链表的第i个位置处插入学号num和成绩scroe的元素
Linklist insert(Linklist L,int i, int num, int score) {
Node* r;
r = (Node*)malloc(sizeof(Node));
r = L->next;
for (int temp = 1; temp < i; temp++)
{
r = r->next;
}
Node* p;
p = (Node*)malloc(sizeof(Node));
p->num = num;
p->score = score;
/*r->next = p;//尾插法
r = p;*/
p->next = r->next;
r->next = p;
return L;
}
//单链表的删除,在链表中删除学号为num对应的成绩
Linklist delete(Linklist L,int num) {
Node* p,*pre;
p = (Node*)malloc(sizeof(Node));
pre = (Node*)malloc(sizeof(Node));
p = L->next;
pre = L;
while (p)
{
if (p->num == num) {
break;
}
p = p->next;
pre = pre->next;
}
pre->next = p->next;
free(p);
return L;
}
//链表合并
//2 3
//5 100
//6 89
//3 82
//4 95
//2 10
Linklist listTomerge(Linklist list1,Linklist list2) {
Node* p1,*p2;
p1 = (Node*)malloc(sizeof(Node));
p2 = (Node*)malloc(sizeof(Node));
p1 = list1;
p2 = list2;
while (p1->next !=NULL) {
p1 = p1->next;
}
p1->next = p2->next;
/*list1= p1;*/
p1 = list1; // 将两个链表合并存放在temp中
free(list2);
return list1;
}
Linklist sortLink(Linklist L,int time) {
Node* r,*p;
int temp;
r = (Node*)malloc(sizeof(Node));
r = L->next;
//while (L)
//{
// /*if (L->num > r->num) {
// temp = L->num;
// L->num = r->num;
// r->num = L->num;
// }
// L = L->next;
// r = r->next;*/
//}
for (int i = 0; i < time; i++)
{
for (int j = 0; j < 6 - 1 - i; j++) {
if (L->num>r->num)
{
temp = L->num;
L->num = r->num;
r->num = L->num;
}
L = L->next;
r = r->next;
}
}
return L;
}
void print(Linklist L) {
Node* p;
p = (Node*)malloc(sizeof(Node));
p = L->next;
while (p)
{
printf("%d %d\n", p->num, p->score);
p = p->next;
}
}
int main()
{
//Linklist list;
//printf("创建一个链表:\n");
//list = creatT();
//print(list);
//printf("修改元素\n");
//replace(list,2,90);//修改学号为2的元素
//print(list);
//printf("插入元素\n");
//insert(list, 3, 4, 86);//在索引为3位置的插入元素
//print(list);
//printf("删除元素\n");
//delete(list, 2);//删除学号为2
//print(list);
Linklist list1,list2,list3,list4;
int N, M;
printf("请输入a、b两个链表元素的数量N、M,用空格隔开:\n");
scanf_s("%d%d", &N, &M);
list1 = creatT_Num(N);
list2 = creatT_Num(M);
printf("\n");
print(list1);
print(list2);
printf("\n");
//链表合并
list3=listTomerge(list1,list2);
print(list3);
printf("\n");
list4=sortLink(list3,N+M);
print(list4);
/*printf("%lld\n", 2019104143415);*/
return 0;
}