philture 2018-08-21 03:04 采纳率: 100%
浏览 642
已采纳

链表线性表的增和删,希望给出详细源代码

设计一个学生档案管理系统,对学生档案进行管理。每个学生的信息包括:学号、姓名、性别、出生年月、是否党员、手机号码、家庭住址、各门课成绩(每门课包括课程名与成绩)
顺序表每个数据元素包括学号、姓名、性别、出生年月、是否党员、手机号码、家庭住址、成绩链表的头指针;成绩链表每个结点的数据域包括课程名与成绩。

结构体定义:学生信息

 typedef struct snode
{
    char No[10];            //学号 
    char Name[20];  //姓名 
    char Gender[5]; //性别 
    int Cnt;        //所选课程数 
    LNode *cj;      //成绩 
    char brithday[20];//生日 
    double Avg;     //平均成绩
    char party[6];  //是否党员
    char phoneNo[15];//手机号码 
    char addr[20];  //家庭住址 
}SNode;

结构体定义:课程信息

 typedef struct node 
{
    char CName[20];
    int Score;
    struct node *next;
}LNode;

现在需要我输入30170001 然后删除张三的所有信息以及输入学生信息,在文件中可以添加一行
主要就是链表操作那块
图片说明

  • 写回答

2条回答 默认 最新

  • 白色一大坨 2018-08-21 03:48
    关注

    插入和删除:

     //尾插函数
    LNode *linklistPushBack(LNode **head, ElemType value)
    {
        //非法输入
        if (head == NULL)
        {
            return NULL;
        }
        //空链表
        if (*head == NULL)
        {
            //直接创建一个新的节点完成元素插入
            *head = CreateNode(value);
            return NULL;
        }
        else
        {
            LNode *cur = *head;
            //遍历链表,让cur指向最后一个元素
            while (cur->next != NULL)
            {
                cur = cur->next;
            }
            //创建一个新节点
            LNode *new_node = CreateNode(value);
            //将最后一个元素的next指向新节点
            cur->next = new_node;
            return new_node;
        }
    }
    
     //删除指定位置的元素(遍历)函数
    //时间复杂度为O(n)
    void linklistErase(LNode **head, LNode *pos)
    {
        //非法输入
        if (head == NULL)
        {
            return;
        }
        //空链表
        if (*head == NULL)
        {
            return;
        }
    
        //如果pos为头结点的位置
        if (pos == *head)
        {
            //则进行头删
            linklistPopFront(head);
            return;
        }
        else
        {
            //创建新的指针指向头结点
            LNode *cur = *head;
            //遍历链表,遍历完成以后cur的下一个位置就是pos
            while (cur->next != pos)
            {
                cur = cur->next;
            }
            //将cur的next指向pos的next
            cur->next = pos->next;
            //销毁pos节点
            DestroyNode(pos);
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大