100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 12.建立一个链表 每个结点包括:学号 姓名 性别 年龄。输人一个年龄 如果链表 中

12.建立一个链表 每个结点包括:学号 姓名 性别 年龄。输人一个年龄 如果链表 中

时间:2019-09-22 21:46:10

相关推荐

12.建立一个链表 每个结点包括:学号 姓名 性别 年龄。输人一个年龄 如果链表 中

主要思路:

1,创建链表

2,判断输入的年龄是否存在,存在就删去

3,输出处理后的链表

具体处理:

1,创建链表:

链表 = 头指针 + 节点

所以先创建节点:

typedef struct node{int sid;char name[20];char sex[10];int age;struct node* next;}node;

然后把节点链接起来,并且让头指针指向第一个节点,并返回头指针;

代码:

node *creatlink(int n)//n是节点个数{node* p = (node*)malloc(sizeof(node));//p是头指针node* p2 = NULL;while(n--){node* q = (node*)malloc(sizeof(node));printf("请输入节点内容(学号 姓名 性别 年龄):\n");scanf("%d %s %s %d", &q->sid, q->name, q->sex, &q->age); if (p2 == NULL){p->next = q;p2 = q;}else{p2->next = q;p2 = q;}}p2->next = NULL;return p;}

2,判断年龄是否存在:

void panduan(int ag, node* a){node* q = NULL;node* qfront = NULL;for (q = a->next, qfront = a; q!= NULL;){if (q->age == ag){qfront->next = q->next;node* t = q;free(t);q = q->next;}else{q = q->next;qfront = qfront->next;}}}

3,打印链表:

void printlink(node* a){node* p = NULL;for (p = a->next; p != NULL; p = p->next){printf("%d %s %s %d\n", p->sid, p->name, p->sex, p->age);}}

完整代码:

# include "stdio.h" # include "stdlib.h"typedef struct node{int sid;char name[20];char sex[10];int age;struct node* next;}node;node *creatlink(int n);void panduan(int ag, node* a);void printlink(node *a);int main(){node* a = creatlink(6);printf("未删除前:\n");printlink(a);int ag;printf("请输入一个要删除的年龄:\n") ;scanf("%d",&ag);panduan(ag, a);printf("删除后:\n");printlink(a);return 0;}node *creatlink(int n){node* p = (node*)malloc(sizeof(node));node* p2 = NULL;while(n--){node* q = (node*)malloc(sizeof(node));printf("请输入节点内容(学号 姓名 性别 年龄):\n");scanf("%d %s %s %d", &q->sid, q->name, q->sex, &q->age); if (p2 == NULL){p->next = q;p2 = q;}else{p2->next = q;p2 = q;}}p2->next = NULL;return p;}void panduan(int ag, node* a){node* q = NULL;node* qfront = NULL;for (q = a->next, qfront = a; q!= NULL;){if (q->age == ag){qfront->next = q->next;node* t = q;free(t);q = q->next;}else{q = q->next;qfront = qfront->next;}}}void printlink(node* a){node* p = NULL;for (p = a->next; p != NULL; p = p->next){printf("%d %s %s %d\n", p->sid, p->name, p->sex, p->age);}}

12.建立一个链表 每个结点包括:学号 姓名 性别 年龄。输人一个年龄 如果链表 中的结点所包含的年龄等于此年龄 则将此结点删去。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。