主要思路:
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.建立一个链表 每个结点包括:学号 姓名 性别 年龄。输人一个年龄 如果链表 中的结点所包含的年龄等于此年龄 则将此结点删去。