philture
philture
采纳率100%
2018-08-21 03:04

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

40
  • c
  • 线性表
  • 链表
已采纳

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

结构体定义:学生信息

 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条回答

  • phenix2009 白色一大坨 3年前

    插入和删除:

     //尾插函数
    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 评论 复制链接分享
  • syaya555 syaya555 3年前

    void Insert(int xuehao1,int math1,int english1,int total1,int n)
    {
    int i;
    student *p=new student;
    student *l=new student;
    l->xuehao=xuehao1;
    l->math=math1;
    l->english=english1;
    l->total=total1;
    p=head;
    for(i=0;i {
    p=p->next;
    }
    l->next=p->next;
    p->next=l;
    size++;
    }
    void Delete(int n)
    {
    int i;
    student *p=new student();
    student *q=new student();
    p=head;
    for(i=0;i {
    p=p->next;
    }
    q=p->next;
    p->next=q->next;
    q->next=NULL;
    size--;
    }

    点赞 评论 复制链接分享