信息采用单链表存储,具体要求如下: 1.定义数据类型。(2分) 2.初始化创建单链表,将4个支部成员信息添加到单链表中。(2分) 3.输出所有成员的信息。(2分) 4.查找学习次数大于n 的成员姓名和学号,并输出。(1分) 5.根据学号信息,修改指定成员的学习次数。(1分) 6.由于某支部成员关系转出,现需删除该成员信息。(1分) 7.由于关系转入,需要插入该成员信息到表中。(1分)
时间: 2023-05-29 17:06:07 浏览: 88
1.定义数据类型。
typedef struct member {
char name[20]; //姓名
int num; //学号
int times; //学习次数
struct member *next; //指向下一个成员的指针
} Member;
2.初始化创建单链表,将4个支部成员信息添加到单链表中。
Member *head = NULL; //定义单链表头指针
Member *p = NULL; //定义指向新节点的指针
//创建第一个节点
head = (Member*)malloc(sizeof(Member));
strcpy(head->name, "张三");
head->num = 1001;
head->times = 10;
head->next = NULL;
//创建第二个节点
p = (Member*)malloc(sizeof(Member));
strcpy(p->name, "李四");
p->num = 1002;
p->times = 8;
p->next = NULL;
head->next = p;
//创建第三个节点
p = (Member*)malloc(sizeof(Member));
strcpy(p->name, "王五");
p->num = 1003;
p->times = 12;
p->next = NULL;
head->next->next = p;
//创建第四个节点
p = (Member*)malloc(sizeof(Member));
strcpy(p->name, "赵六");
p->num = 1004;
p->times = 5;
p->next = NULL;
head->next->next->next = p;
3.输出所有成员的信息。
p = head; //指向第一个节点
while (p != NULL) {
printf("姓名:%s 学号:%d 学习次数:%d\n", p->name, p->num, p->times);
p = p->next; //指向下一个节点
}
4.查找学习次数大于n 的成员姓名和学号,并输出。
int n;
printf("请输入学习次数n:");
scanf("%d", &n);
p = head; //指向第一个节点
while (p != NULL) {
if (p->times > n) {
printf("姓名:%s 学号:%d\n", p->name, p->num);
}
p = p->next; //指向下一个节点
}
5.根据学号信息,修改指定成员的学习次数。
int num, newTimes;
printf("请输入学号和新的学习次数:");
scanf("%d %d", &num, &newTimes);
p = head; //指向第一个节点
while (p != NULL) {
if (p->num == num) {
p->times = newTimes;
printf("修改成功!\n");
break;
}
p = p->next; //指向下一个节点
}
if (p == NULL) {
printf("没有找到该成员!\n");
}
6.由于某支部成员关系转出,现需删除该成员信息。
int delNum;
printf("请输入要删除的成员学号:");
scanf("%d", &delNum);
p = head; //指向第一个节点
if (p->num == delNum) { //如果要删除的是第一个节点
head = p->next;
free(p);
printf("删除成功!\n");
} else { //如果要删除的不是第一个节点
while (p->next != NULL) {
if (p->next->num == delNum) {
Member *del = p->next; //定义指向要删除节点的指针
p->next = p->next->next;
free(del);
printf("删除成功!\n");
break;
}
p = p->next; //指向下一个节点
}
if (p->next == NULL) {
printf("没有找到该成员!\n");
}
}
7.由于关系转入,需要插入该成员信息到表中。
Member *newMember = (Member*)malloc(sizeof(Member));
printf("请输入新成员的姓名、学号和学习次数:");
scanf("%s %d %d", newMember->name, &newMember->num, &newMember->times);
newMember->next = NULL;
if (head == NULL) { //如果链表为空,直接将新节点作为头节点
head = newMember;
} else { //如果链表不为空,找到最后一个节点,将新节点插入
p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = newMember;
}
printf("插入成功!\n");
完整代码如下:
阅读全文