吃玉米的猫 2022-09-05 09:25 采纳率: 100%
浏览 42
已结题

简单的C语言关于链表操作

c语言链表操作怎么用啊,刚学不太懂。对于输入的若干学生的信息(学号、姓名、年龄),要求使用链表完成:还要在中间插入和删除。

img

img

img

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-09-05 11:32
    关注

    供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    typedef struct node {
        char num[10];  //学号
        char name[10]; //姓名
        int  age;      //年龄
        struct node* next;
    }Lnode, * LinkNode;
    void creatlist(LinkNode* L, int n)
    {
        int i;
        LinkNode pt;
        for (i = 0; i < n; i++) {
            pt = (LinkNode)malloc(sizeof(Lnode));
            pt->next = NULL;
            scanf("%s %s %d", pt->num, pt->name, &pt->age);
            pt->next = (*L);
            (*L) = pt;
        }
    }
    void insertlist(LinkNode L, LinkNode pt, int i, int n)
    {
        int k = 0;
        if (i < 1 || i > n) return;
        LinkNode p = L;
        while (p && k < i - 1) {
            k++;
            p = p->next;
        }
        pt->next = p->next;
        p->next = pt;
    }
    void deletelist(LinkNode* L, char* s_num)
    {
        LinkNode p = (*L), pre = NULL;
        while (p) {
            if (strcmp(p->num, s_num) == 0) {
                if (p == (*L)) {
                    (*L) = p->next;
                    free(p);
                    p = (*L);
                }
                else {
                    pre->next = p->next;
                    free(p);
                    p = pre;
                }
            }
            else {
                pre = p;
                p = p->next;
            }
        }
    }
    void printlist(LinkNode L)
    {
        LinkNode p = L;
        while (p) {
            printf("%s %s %d\n", p->num, p->name, p->age);
            p = p->next;
        }
    }
    int main()
    {
        int T, n, m;
        scanf("%d", &T);//输入正整数 T
        while (T--) {
            char num[10] = { 0 };//待删除学生的学号
            LinkNode L = NULL, pt = NULL;
            scanf("%d", &n);//输入正整数 n ,表示 n 个学生 
            creatlist(&L, n); //输入 n 行学生信息,创建链表 
            pt = (LinkNode)malloc(sizeof(Lnode));
            pt->next = NULL;
            scanf("%d %s %s %d", &m, pt->num, pt->name, &pt->age);//输入m 和一个新学生的信息
            scanf("%s", num); //输入待删除学生的学号
            printlist(L);    //以下开始依次输出描述中要求的学生信息
            insertlist(L, pt, m, n);
            printlist(L);
            deletelist(&L, num);
            printlist(L);
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月13日
  • 已采纳回答 9月5日
  • 创建了问题 9月5日

悬赏问题

  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)