实验11-2-9 链表逆置(20 分)

实验11-2-9 链表逆置(20 分)

本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表结点定义如下:

1
2
3
4
struct ListNode {
int data;
struct ListNode *next;
};

函数接口定义:

1
struct ListNode *reverse( struct ListNode *head );

其中head是用户传入的链表的头指针;函数reverse将链表head逆置,并返回结果链表的头指针。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>

struct ListNode {
int data;
struct ListNode *next;
};

struct ListNode *createlist(); /*裁判实现,细节不表*/
struct ListNode *reverse( struct ListNode *head );
void printlist( struct ListNode *head )
{
struct ListNode *p = head;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}

int main()
{
struct ListNode *head;

head = createlist();
head = reverse(head);
printlist(head);

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
1 2 3 4 5 6 -1

输出样例:

1
6 5 4 3 2 1

实验11-2-8 单链表结点删除(20 分)

实验11-2-8 单链表结点删除(20 分)

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除。链表结点定义如下:

1
2
3
4
struct ListNode {
int data;
ListNode *next;
};

函数接口定义:

1
2
struct ListNode *readlist();
struct ListNode *deletem( struct ListNode *L, int m );

函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。

函数deletem将单链表L中所有存储了m的结点删除。返回指向结果链表头结点的指针。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>

struct ListNode {
int data;
struct ListNode *next;
};

struct ListNode *readlist();
struct ListNode *deletem( struct ListNode *L, int m );
void printlist( struct ListNode *L )
{
struct ListNode *p = L;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}

int main()
{
int m;
struct ListNode *L = readlist();
scanf("%d", &m);
L = deletem(L, m);
printlist(L);

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
2
10 11 10 12 10 -1
10

输出样例:

1
11 12

实验11-2-7 统计专业人数(15 分)

实验11-2-7 统计专业人数(15 分)

本题要求实现一个函数,统计学生学号链表中专业为计算机的学生人数。链表结点定义如下:

1
2
3
4
struct ListNode {
char code[8];
struct ListNode *next;
};

这里学生的学号共7位数字,其中第2、3位是专业编号。计算机专业的编号为02。

函数接口定义:

1
int countcs( struct ListNode *head );

其中head是用户传入的学生学号链表的头指针;函数countcs统计并返回head链表中专业为计算机的学生人数。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct ListNode {
char code[8];
struct ListNode *next;
};

struct ListNode *createlist(); /*裁判实现,细节不表*/
int countcs( struct ListNode *head );

int main()
{
struct ListNode *head;

head = createlist();
printf("%d\n", countcs(head));

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
2
3
4
5
6
7
1021202
2022310
8102134
1030912
3110203
4021205
#

输出样例:

1
3

实验11-2-6 奇数值结点链表(20 分)

实验11-2-6 奇数值结点链表(20 分)

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下:

1
2
3
4
struct ListNode {
int data;
ListNode *next;
};

函数接口定义:

1
2
struct ListNode *readlist();
struct ListNode *getodd( struct ListNode **L );

函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。

函数getodd将单链表L中奇数值的结点分离出来,重新组成一个新的链表。返回指向新链表头结点的指针,同时将L中存储的地址改为删除了奇数值结点后的链表的头结点地址(所以要传入L的指针)。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>

struct ListNode {
int data;
struct ListNode *next;
};

struct ListNode *readlist();
struct ListNode *getodd( struct ListNode **L );
void printlist( struct ListNode *L )
{
struct ListNode *p = L;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}

int main()
{
struct ListNode *L, *Odd;
L = readlist();
Odd = getodd(&L);
printlist(Odd);
printlist(L);

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
1 2 2 3 4 5 6 7 -1

输出样例:

1
2
1 3 5 7 
2 2 4 6

实验11-2-5 链表拼接(20 分)

实验11-2-5 链表拼接(20 分)

本题要求实现一个合并两个有序链表的简单函数。链表结点定义如下:

1
2
3
4
struct ListNode {
int data;
struct ListNode *next;
};

函数接口定义:

1
struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2);

其中list1list2是用户传入的两个按data升序链接的链表的头指针;函数mergelists将两个链表合并成一个按data升序链接的链表,并返回结果链表的头指针。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <stdlib.h>

struct ListNode {
int data;
struct ListNode *next;
};

struct ListNode *createlist(); /*裁判实现,细节不表*/
struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2);
void printlist( struct ListNode *head )
{
struct ListNode *p = head;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}

int main()
{
struct ListNode *list1, *list2;

list1 = createlist();
list2 = createlist();
list1 = mergelists(list1, list2);
printlist(list1);

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
2
1 3 5 7 -1
2 4 6 -1

输出样例:

1
1 2 3 4 5 6 7

实验11-2-4 删除单链表偶数节点(20 分)

实验11-2-4 删除单链表偶数节点(20 分)

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下:

1
2
3
4
struct ListNode {
int data;
struct ListNode *next;
};

函数接口定义:

1
2
struct ListNode *createlist();
struct ListNode *deleteeven( struct ListNode *head );

函数createlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。

函数deleteeven将单链表head中偶数值的结点删除,返回结果链表的头指针。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>

struct ListNode {
int data;
struct ListNode *next;
};

struct ListNode *createlist();
struct ListNode *deleteeven( struct ListNode *head );
void printlist( struct ListNode *head )
{
struct ListNode *p = head;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}

int main()
{
struct ListNode *head;

head = createlist();
head = deleteeven(head);
printlist(head);

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
1 2 2 3 4 5 6 7 -1

输出样例:

1
1 3 5 7

实验11-2-3 逆序数据建立链表(20 分)

实验11-2-3 逆序数据建立链表(20 分)

本题要求实现一个函数,按输入数据的逆序建立一个链表。

函数接口定义:

1
struct ListNode *createlist();

函数createlist利用scanf从输入中获取一系列正整数,当读到−1时表示输入结束。按输入数据的逆序建立一个链表,并返回链表头指针。链表节点结构定义如下:

1
2
3
4
struct ListNode {
int data;
struct ListNode *next;
};

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>

struct ListNode {
int data;
struct ListNode *next;
};

struct ListNode *createlist();

int main()
{
struct ListNode *p, *head = NULL;

head = createlist();
for ( p = head; p != NULL; p = p->next )
printf("%d ", p->data);
printf("\n");

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
1 2 3 4 5 6 7 -1

输出样例:

1
7 6 5 4 3 2 1

实验11-2-2 学生成绩链表处理(20 分)

实验11-2-2 学生成绩链表处理(20 分)

本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。

函数接口定义:

1
2
struct stud_node *createlist();
struct stud_node *deletelist( struct stud_node *head, int min_score );

函数createlist利用scanf从输入中获取学生的信息,将其组织成单向链表,并返回链表头指针。链表节点结构定义如下:

1
2
3
4
5
6
struct stud_node {
int num; /*学号*/
char name[20]; /*姓名*/
int score; /*成绩*/
struct stud_node *next; /*指向下个结点的指针*/
};

输入为若干个学生的信息(学号、姓名、成绩),当输入学号为0时结束。

函数deletelist从以head为头指针的链表中删除成绩低于min_score的学生,并返回结果链表的头指针。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <stdlib.h>

struct stud_node {
int num;
char name[20];
int score;
struct stud_node *next;
};

struct stud_node *createlist();
struct stud_node *deletelist( struct stud_node *head, int min_score );

int main()
{
int min_score;
struct stud_node *p, *head = NULL;

head = createlist();
scanf("%d", &min_score);
head = deletelist(head, min_score);
for ( p = head; p != NULL; p = p->next )
printf("%d %s %d\n", p->num, p->name, p->score);

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
2
3
4
5
6
1 zhang 78
2 wang 80
3 li 75
4 zhao 85
0
80

输出样例:

1
2
2 wang 80
4 zhao 85

实验11-2-1 建立学生信息链表(20 分)

实验11-2-1 建立学生信息链表(20 分)

本题要求实现一个将输入的学生成绩组织成单向链表的简单函数。

函数接口定义:

1
void input();

该函数利用scanf从输入中获取学生的信息,并将其组织成单向链表。链表节点结构定义如下:

1
2
3
4
5
6
struct stud_node {
int num; /*学号*/
char name[20]; /*姓名*/
int score; /*成绩*/
struct stud_node *next; /*指向下个结点的指针*/
};

单向链表的头尾指针保存在全局变量headtail中。

输入为若干个学生的信息(学号、姓名、成绩),当输入学号为0时结束。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct stud_node {
int num;
char name[20];
int score;
struct stud_node *next;
};
struct stud_node *head, *tail;

void input();

int main()
{
struct stud_node *p;

head = tail = NULL;
input();
for ( p = head; p != NULL; p = p->next )
printf("%d %s %d\n", p->num, p->name, p->score);

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
2
3
4
5
1 zhang 78
2 wang 80
3 li 75
4 zhao 85
0

输出样例:

1
2
3
4
1 zhang 78
2 wang 80
3 li 75
4 zhao 85

实验11-1-9 藏尾诗(20 分)

实验11-1-9 藏尾诗(20 分)

本题要求编写一个解密藏尾诗的程序。

输入格式:

输入为一首中文藏尾诗,一共四句。每句一行,但句子不一定是等长的,最短一个汉字,最长九个汉字。注意:一个汉字占两个字节。

输出格式:

取出每句的最后一个汉字并连接在一起形成一个字符串并输出。同时在末尾输入一个换行符。

输入样例:

1
2
3
4
悠悠田园风
然而心难平
兰花轻涌浪
兰香愈幽静

输出样例:

1
风平浪静
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×