精华内容
下载资源
问答
  • #include #include using namespace std; struct Student{ long number; float score;...p=p->next ) { // 循环输出 cout<< p->number ," << p->score ; } } int main(){ cout (1); Create(); ShowList(); }

    #include  <iostream>
    #include  <iomanip>
    using  namespace  std;
    struct  Student{
            long  number;
            float  score;
            Student*  next=NULL;
    };
    Student *head=new Student;
     
    Student *pE=head;
    Student *p=head;
    Student *p1=head,*p2; 
    
     
    
    Student*  getNode(){
    		
            int  num;
            float  sc;
            cin  >>  num  >>  sc;
            if(num  ==  0)  {
                    return  NULL;
            }
            Student*  p  =  new  Student;
            p->number  =  num;
            p->score  =  sc;
            p->next  =  0;
            return  p;
    }
    void  Create()  {
    	
    		 
            if((head  =  getNode())  ==  0)  { 
    		return   //  添加结束条件
                     ;
            }
            for  (  Student*pS=getNode() ,*p11=head; pS !=NULL; pE=pS,pS=getNode(),p=head)  { 
    	           //cout<<"begincreating"<<endl;
    		 cout<<  p->number  <<  ","  <<  p->score  <<  endl;
                    pE->next  =  pS;
             
    }
    }
    void  ShowList()  {
            cout  <<  "now  the  itens  of  list  are  \n";
            for(p->next=p1->next;p !=NULL;p=p->next )  {    //  循环输出
                    cout<<  p->number  <<  ","  <<  p->score  <<  endl;
            }
    }
    int  main(){
            cout  <<  fixed  <<  setprecision(1);
            Create();
            ShowList();
    }

    展开全文
  • 编写C语言程序的7个步骤编程机制 C语言基础-第一个C程序 C语言基础-简单程序分析 VS2019编写简单的C程序示例 简单示例,VS2019调试C语言程序 C语言基础-基本算法 C语言基础-数据类型 C语言中的输入输出函数 C语言...

    C语言文章更新目录

    C/C++学习资源(百度云盘链接)
    计算机二级资料(过级专用)
    C语言学习路线(从入门到实战)
    编写C语言程序的7个步骤和编程机制
    C语言基础-第一个C程序
    C语言基础-简单程序分析
    VS2019编写简单的C程序示例
    简单示例,VS2019调试C语言程序
    C语言基础-基本算法
    C语言基础-数据类型
    C语言中的输入输出函数
    C语言流程控制语句
    C语言数组——一维数组
    C语言数组——二维数组
    C语言数组——字符数组
    C语言中常用的6个字符串处理函数
    精心收集了60个C语言项目源码,分享给大家
    C语言核心技术——函数
    C代码是怎样跑起来的?
    C语言实现字符串的加密和解密
    C语言——文件的基本操作

    今天来介绍一下C语言中常见的一种数据结构——链表

    如下是链表的结构示意图:

    image.png

    在链表中有一个头指针变量,图中head表示的就是头指针,这个指针变量保存一个地址。也就是说头指针指向一个变量,这个变量就是量表的元素。在链表中每一个元素包括数据部分和指针部分。数据部分用来存放元素所包含的数据,而指针部分用来指向下一个元素。最后一个元素的指针指向null,表示指向的地址为空。

    从示意图中我们可以看到,head头结点指向第一个元素,第一个元素的指针指向第二个元素,第二个元素的指针又指向第三个元素,第三个元素的指针指向null。这样我们就可以通过头指针寻找链表中的元素。

    下来我们通过一个具体的实例来深入地了解一下链表,编写一个学生信息的链表结构,并且将链表中的信息进行输出。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    
    struct Student
    {
        char name[20];//姓名
        int id;//学号
        struct Student* next;//指向下一个节点的指针
    };
    
    int count;//表示链表长度
    
    struct Student* create()
    {
        struct Student* head = NULL;//初始化链表的头指针
        struct Student* end, * new;
        count = 0;//初始化链表长度
    
        end = new = (struct Student*)malloc(sizeof(struct Student));//动态分配内存空间
        printf("请输入姓名,学号\n");
        scanf("%s", &new->name);
        scanf("%d", &new->id);
        while (new->id != 0)
        {
            count++;
            if (count == 1)
            {
                new->next = head;//使得指向为空
                end = new;//跟踪新加入的节点
                head = new;//头指针指向首节点
            }
            else
            {
                new->next = NULL;//新节点的指向为空
                end->next = new;//原来的为节点指向新节点
                end = new;//end指向新节点
            }
    
            new = (struct Student*)malloc(sizeof(struct Student));//再次动态分配节点的内存空间
            scanf("%s", &new->name);
            scanf("%d", &new->id);
    
        }
        free(new);//释放空间
        return head;
    };
    
    void show(struct Student* head) {
        struct Student *temp;
        int index = 1;
        printf("有%d位学生:\n",count);
        temp = head;
        while (temp != NULL)
        {
            printf("第 %d 位学生的姓名是:%s,学号是:%d \n", index, temp->name, temp->id);
            temp = temp->next;
            index++;
        }
    }
    
    int main() {
        struct Student* head;//定义头结点
        head = create();//创建节点
        show(head);//输出链表
        return 0;
    }
    

    运行结果

    image.png

    如果您觉得本篇文章对您有帮助,请转发给更多的人
    C语言中文社区】是一个C语言/C++视频教程、学习笔记、电子书、计算机二级资料等专注于C语言/C++编程学习者的干货知识分享平台,精选深度文章,分享优秀干货类、技能类的学习资源,帮助学习中的你。
    在这里插入图片描述

    展开全文
  • 上机实验习题 上机实验要求及规范 C程序设计具有比较强的理论性,同时也具有较强的可应用性实践性。在上机实验是一个重要的教学环节...),确定数据的存储结构(是顺序结构还是链表结构?)。然后设计有关操作的函...

    上机实验习题
    上机实验要求及规范
    C程序设计具有比较强的理论性,同时也具有较强的可应用性和实践性。在上机实验是一个重要的教学环节。具体实习步骤如下:
    1.问题分析与系统结构设计
    充分地分析和理解问题本身,弄清要求做什么(而不是怎么做),限制条件是什么。按照以数据结构为中心的原则划分模块,搞清数据的逻辑结构(是线性表还是树、图?),确定数据的存储结构(是顺序结构还是链表结构?)。然后设计有关操作的函数。在每个函数模块中,要综合考虑系统功能,使系统结构清晰、合理、简单和易于调试。最后写出每个模块的算法头和规格说明,列出模块之间的调用关系(可以用图表示),便完成了系统结构设计。
    3.上机准备
    熟悉高级语言用法,如C语言。熟悉机器(即操作系统),基本的常用命令。静态检查主要有两条路径,一是用一组测试数据手工执行程序(或分模块进行);二是通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑,在这个过程中再加入一些注释和断言。如果程序中逻辑概念清楚,后者将比前者有效。
    4.上机调试程序
    调试最好分块进行,自底向上,即先调试底层函数,必要时可以另写一个调用驱动程序,表面上的麻烦工作可以大大降低调试时所面临的复杂性,提高工作效率。
    5.整理实习报告
    在上机实开始之前要充分准备实验数据,在上机实践过程中要及时记录实验数据,在上机实践完成之后必须及时总结分析。写出实验报告。
    一、实验报告的基本要求:
    一般性、较小规模的上机实验题,必须遵循下列要求。养成良好的习惯。
    (1)姓名 班级 学号 日期
    (2)题目:内容叙述
    (3)程序清单(带有必要的注释)
    (4)调试报告:
    实验者必须重视这一环节,否则等同于没有完成实验任务。这里可以体现个人特色、或创造性思维。具体内容包括:测试数据与运行记录;调试中遇到的主要问题,自己是如何解决的;经验和体会等。
    二、实验习报告的提高要求:
    阶段性、较大规模的上机实验题,应该遵循下列要求。养成科学的习惯。
    (1)需求和规格说明
    描述问题,简述题目要解决的问题是什么。规定软件做什么。原题条件不足时补全。
    (2)设计
    a.设计思想:存储结构(题目中限定的要描述);主要算法基本思想。
    b.设计表示:每个函数的头和规格说明;列出每个函数所调用和被调用的函数,也可以通过调用关系图表达。
    c.实现注释:各项功能的实现程度、在完成基本要求的基础上还有什么功能。
    (3)用户手册:即使用说明。
    (4)调试报告:调试过程中遇到的主要问题是如何解决的;设计的回顾、讨论和分析;时间复杂度、空间复杂度分析;改进设想;经验和体会等。

    编制部门:国土资源学院 编制人:李谦 审核人: 编制日期:2017年3月23日
    项目编号 No. C001
    项目名称 数据结构
    训练对象 GIS 2015级7、8
    学时 4
    课程名称 数据结构实验
    教 材 数据结构(C语言版)

    目的
    Objective 1.学会用算法来进行编程。
    第一题
    建立一个学生信息录入系统,要求:录入学生的姓名,学号,性别,年龄,成绩,地址
    并输出。
    第二题
    创建两个链表,给每个链表赋值,并合并输出
    第三题
    为学生信息创建链表,并输出
    第一题:

    程序代码如下:
    #include<stdio.h>  
    #include<malloc.h>  
    #include<string.h>  
    #include<stdlib.h>  
    #define LEN sizeof (struct stu)  
      
    struct stu  
    {  
        char num[100];  
        char name[50];  
        char sex[3];  
        char age[100];  
        char score[100];  
        char adre[50];  
        struct stu *next; 
    };  /*定义学生信息链表的结点结构*/
    struct stu *creat(void)  
    {  
        struct stu *p1,*p2,*head;  
        head=NULL;  
        int i=0;  
        p1=(struct stu*)malloc(LEN);  
        while(1)  
        {  
            i++;  
            scanf("%s",p1->num);  
            if(strcmp(p1->num,"end")==0)  
                break;  
            else  
            {  
                scanf("%s",p1->name);  
                scanf("%s",p1->sex);  
                scanf("%s",p1->age);  
                scanf("%s",p1->score);  
                scanf("%s",p1->adre);  
                p1->next=NULL;  
                if(head==NULL)  
                    head=p1;  
                else  
                    p2->next=p1;  
                p2=p1;  
                p1=(struct stu*)malloc(LEN);  
            }  
        }  
        return head;  
    }  
    struct stu *swap(struct stu *head)  
    {  
        struct stu *p,*q,*t;  
        p=head;  
        q=NULL;  
        while(p!=NULL)  
        {  
            t=p->next;  
            p->next=q;  
            q=p;  
            p=t;  
        }  
        return q;  
    }//单项链表逆转函数  
    void print(struct stu *p)  
    {  
        struct stu *p1;  
        p1=p;  
        while(p1!=NULL)  
        {  
            printf("%s %s %s %s %s %s\n",p1->num,p1->name,p1->sex,p1->age,p1->score,p1->adre);  
            p1=p1->next;  
        }  
    }  
    int main()  
    {     
        struct stu *p,*head;
    	printf("****************************************************************\n");
        printf("*      Welcome to use the system of the students' informations *\n");
        printf("****************************************************************\n");
        printf("*      Please input the informations of students:              *\n");
        printf("*                   1:Student's number                         *\n");
        printf("*                   2:Student's name                           *\n");
        printf("*                   3:Student's sex                            *\n");
        printf("*                   4:Student's age                            *\n");
        printf("*                   5:Student's score                          *\n");
        printf("*                   6:Student's address                        *\n");
        printf("*                   7:quit the system(input 'end')             *\n");
        printf("****************************************************************\n");
    	printf("*    number\tname\tsex\tage\tscore\taddress                    *\n");/*添加一个学生信息*/  
        head=creat();  
        p=swap(head);
    	printf("*           output the informations of students                *\n");
    	printf("*    number\tname\tsex\tage\tscore\taddress                    *\n");
        print(p);  
        return 0;  
    }  
    

    第二题

    #include <stdio.h>
    #include<stdlib.h>
    struct node
    {
        int data;
        struct node *next;
    };
     
    void print(struct node *h)
    {
        struct node *p;
        p=h->next;
        while(p!=NULL)
        {
            printf("->%d",p->data);
            p=p->next;
        }
        printf("\n\n");
    }
     
    struct node* order(struct node *head)
    {
        struct node *h,*p,*q;
        int i,n,chg;
        printf("输入当前排序链表长度:");
        scanf("%d",&n);
        h=head;
        for(i=0;i<n-1;i++)
            for(q=h->next,p=q->next;p!=NULL;q=p,p=p->next)
                if(q->data>p->data)
                {
                    chg=p->data;
                    p->data=q->data;
                    q->data=chg;
                }
        printf("排序后的链表为:");
        print(h);
        return h;
    }
     
    struct node* creat()
    {
        int i,n;
        struct node *p,*q,*h;
     
        printf("输入要创建的链表长度:");
        scanf("%d",&n);
        h=(struct node*)malloc(sizeof(struct node));
        h->data=n;   
        h->next=NULL;
     
        q=h;
        for(i=0;i<n;i++)
        {
            p=(struct node *)malloc(sizeof(struct node));
            printf("input num[%d]:",i);
            scanf("%d",&p->data);
            p->next=NULL;
            q->next=p;
            q=p;
        }
        printf("创建的链表为:");
        print(h);
        return h;
    }   
     
    struct node* join(struct node *head1,struct node *head2)
    {
        struct node *h,*p,*p1,*p2;
        h=(struct node *)malloc(sizeof(struct node));
        h->data=0;
        h->next=NULL;
        p=h;
        p1=head1->next;
        p2=head2->next;
        while(p1&&p2)
        {
            if(p1->data<p2->data)
            {
                p->next=p1;
                p=p1;
                p1=p1->next;
            }
            else
            {   
                p->next=p2;
                p=p2;
                p2=p2->next;
            }
        }
        p->next=p1?p1:p2;
        printf("合并后的链表为:");
        print(h);
        return h;
    }
    void main()
    {
        struct node *head,*head1,*head2;
        head1=creat();
        head1=order(head1);
        head2=creat();
        head2=order(head2);
        head=join(head1,head2);
    }
    

    第三题

    #include <stdio.h>
    #include <stdlib.h>
    #define NULL 0
    typedef struct
    {
    	int num;
    	int grade;
    }stu;
    
    typedef struct node
    {
    	stu data;
    	struct node *next;
    }node;
    node *p,*head,*q;
    
    void main()
    {
    	int n;
    	int i;
    	printf("please enter the number of student:\n");
    	scanf("%d",&n);
    	head=(node*)malloc(sizeof(node));
    	head->next=NULL;
    	q=head;
    	for(i=0;i<n;i++)
    	{
    		printf("请输入第%d个学生的信息:\n",i+1);
    		p=(node*)malloc(sizeof(node));
    		scanf("%d %d",&p->data.num,&p->data.grade);
    		q->next=p;
    		q=q->next;
    	}
    	p->next=NULL;
    	printf("学生信息链``表为:\n");
    	q=head;
    	q=q->next;
        while(q)
    	{
            printf("%d  %d\n",q->data.num,q->data.grade);
    	    q=q->next;
    	}
    }
    

    心得体会:结构体和链表的创建之间的联系,链表的存储和输出的格式是什么样子的也比在之前更加的清楚了。

    展开全文
  • * 本程序展示链表创建输出、删除、插入查找操作。主函数中分别调用 * (1) 建立链表的函数create(), * (2) 输出链表的函数print(), * (3) 删除链表结点的函数del(), * (4) 插入结点的函数insert(), * (5)...
  • PAGE / NUMPAGES 链表(创建插入删除打印输出 /* 时间:2011年9月28日 文件功能:实现了动态建立一个学生信息链表包括链表创建插入删除打印输出学生信息包括姓名分数 本链表是带有头结点的头结点的内容为空...
  • 统计学生信息(使用动态链表完成),c语言程序设计,适合初学者学习
  • 使用链表创建一个学生信息管理系统 通过一个循环函数,在创建了学生信息链表之后能够继续进行输出、查询、添加、删除学生信息等功能 #include <stdio.h> #include <conio.h> #include <stdlib.h> ...

    使用链表创建一个学生信息管理系统

    通过一个循环函数,在创建了学生信息链表之后能够继续进行输出、查询、添加、删除学生信息等功能

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>
    #define len sizeof(student)
    #define true 1
    
    
    //定义需要储存学生信息的结构体
    struct student
    {
        int num;   //学号
        char name[20];  //姓名
        char sex;   //性别
        float c_program;    //c语言成绩
        float math;    //数学成绩
        float engl;    //英语成绩
        float aver;    //平均成绩
        struct student * next;
    };
    typedef struct student student;
    typedef struct student * student_link;
    
    //学生信息链表的头结点
    struct student_info
    {
        int stu_num;    //学生总人数
        student_link next;     //指向第一个学上
    };
    typedef struct student_info * stu_info;
    
    
    //函数声明
    void menu();
    int creat(stu_info head);
    void output_stu(stu_info head);
    void add_stu(stu_info head);
    void search_stu(stu_info head);
    void search_num(stu_info head);  //按照学号查找
    void search_name(stu_info head);  //按照姓名查找
    void delete_stu(stu_info head);
    void delete_num(stu_info head);
    void delete_name(stu_info head);
    
    
    int main()
    {
        struct student_info new_student_list;
        struct student_info * head;
        int point;
        head = &new_student_list;
        head->stu_num = 0;
        menu();
        while(true)
        {
            printf("\n请输入您的操作指令: ");
            scanf("%d", &point);
            switch(point)
            {
                case 1: creat(head);break;
                case 2: output_stu(head);break;
                case 3: search_stu(head);break;
                case 4: add_stu(head);break;
                case 5: delete_stu(head);break;
                case 6: printf("即将退出程序。");return 0;break;
                default: printf("输入错误!");break;
    
            }
        }
    }
    
    //创建菜单函数
    void menu()
    {
        printf("\n==============欢迎使用学生成绩管理系统==============");
        printf("\n\n\t\t1.新建学生成绩表");
        printf("\n\n\t\t2.输出学生成绩表");
        printf("\n\n\t\t3.查询学生成绩");
        printf("\n\n\t\t4.添加学生成绩");
        printf("\n\n\t\t5.删除学生成绩");
        printf("\n\n\t\t6.退出管理系统");
    }
    
    
    
    //创建学生链表
    int creat(stu_info head)
    {
        student_link p, q;
        q = head->next;
        head->next = NULL;
        p = (student_link) malloc(len);
        printf("\n===========退出学生信息管理系统方法:学生的学号为0则会退出输入!=========");
        printf("\n\n准备录入学生信息:\n\n");
        printf("请依次输入:学号 姓名 性别(男/女)\n ");
        scanf("%d %s %c", &p->num, p->name, &p->sex);
        if(p->num == 0)
            return 0;
        while(p->num != 0)
        {
            fflush(stdin);
            printf("请依次输入:C语言成绩 数学成绩 英语成绩:\n");
            scanf("%f %f %f", &p->c_program, &p->math, &p->engl);
            p->aver = (p->c_program + p->math + p->engl) / 3;
            if(head->next == NULL)
            {
                q = p;
                head->next = q;
                head->stu_num++;
                p = (student_link) malloc(len);
                printf("请依次输入:学号 姓名 性别(男/女)\n");
                scanf("%d %s %c", &p->num, p->name, &p->sex);
            }
            else
            {
                q->next = p;
                q = p;
                head->stu_num++;
                p = (student_link) malloc(len);
                printf("请依次输入:学号 姓名 性别(男/女)\n");
                scanf("%d %s %c", &p->num, p->name, &p->sex);
            }
        }
        q->next = NULL;
        return 0;
    }
    
    
    void output_stu(stu_info head)  //链表头指针作为函数参数
    {
        student_link temp;
        temp = head->next;
        printf("\n该列表共包含%d名学生", head->stu_num);
        printf("\n\n\n********************学生成绩信息表*********************\n\n\n");
        printf("学号\t\t姓名\t\t性别\t\t程序设计\t高等数学\t大学英语\t平均成绩\n");
        while(temp != NULL){
            printf("%-12d%-12s%-12c%-12.2f%-12.2f%-12.2f%-12.2f\n", temp->num, temp->name, temp->sex,\
                temp->c_program, temp->math, temp->engl, temp->aver);
            temp = temp->next;
        }
    
    }
    
    
    //查找学生信息,查找方式包括:1.按照学号查找;2.按照姓名查找
    void search_stu(stu_info head)
    {
        int choice = -1;
        if(head->next == NULL)
        {
            printf("学生列表为空\n");
        }
        else
        {
            fflush(stdin);
            printf("\n请输入查找方式:1.按照学号查找;2.按照姓名查找;0.取消 : ");
            scanf("%d", &choice);
            switch(choice)
            {
                case 1: search_num(head);break;
                case 2: search_name(head);break;
                case 0: break;
                default: search_stu(head);break;
            }
        }
    }
    
    void search_num(stu_info head)  //按照学号查找
    {
        int target_num; //查询目标的学号
        student_link p; //循环结点
        p = head->next;
        printf("\n请输入查询学生的学号:");
        scanf("%d", &target_num);
        //注意:两个判断条件一定不能互换位置,原因:当p指向NULL之后,p就没有num成员了,
        //所以先判断p->num != target_num会导致程序陷入这里的while循环条件判断语句。
        while (p != NULL && p->num != target_num)	
            p = p->next;
        if(p == NULL)
            printf("\n列表中没有这名学生的信息。\n");
        else
        {
            printf("\n学号\t姓名\t性别\t程序设计    高等数学    大学英语    平均成绩\n");
            printf("%-10d%-10s%-10c%-8.2f%-8.2f%-8.2f%-8.2f\n", p->num, \
            p->name, p->sex,p->c_program,p->math, p->engl, p->aver);
        }
    }
    
    void search_name(stu_info head)  //按照姓名查找
    {
        student_link p;
        char name[20];
        int count = 0;  //记录搜索到的学生的数量,即同名人数
        p = head->next;
        printf("\n请输入被查询学生的姓名:");
        scanf("%s", name);
        printf("\n学号\t姓名\t性别\t程序设计    高等数学    大学英语    平均成绩\n");
        while(p != NULL)
        {
            if(strcmp(p->name, name) == 0)
            {
                printf("%-10d%-10s%-10c%-8.2f%-8.2f%-8.2f%-8.2f\n", p->num, \
                   p->name, p->sex, p->c_program, p->math, p->engl, p->aver);
                count++;
                p = p->next;    //继续查找,防止重名
            }
            else
                p = p->next;
        }
        if(count == 0)
            printf("列表中没有这名学生的信息。\n");
    }
    
    
    //添加学生信息
    void add_stu(stu_info head)
    {
        student_link p, q;
        int index;
        q = head->next;
        p = (student_link)malloc(len);  //填写新加入学生的基本信息
        printf("\n输入新加入学生的详细信息,输入内容如下:\n");
        printf("\n依次输入:学号 姓名 性别(m/w)\n");
        scanf("%d %s %c", &p->num, p->name, &p->sex);
        fflush(stdin);
        printf("\n依次输入:C语言成绩 数学成绩 英语成绩\n");
        scanf("%f %f %f", &p->c_program, &p->math, &p->engl);
        p->aver = (p->c_program + p->math + p->engl) / 3;   //填写结束
        printf("\n请输入新同学的位置:");
        scanf("%d", &index);
        if(index <= 0)
        {
            printf("\n插入位置输入错误");
        }
        else if(index == 1)      //插入到学生列表第一个位置
        {
            p->next = head->next;
            head->next = p;
            head->stu_num++;
        }
        else if(index > 1 && index <= head->stu_num)     //插入到中间位置的第index个
        {
            for(int i = 1; i < index - 1; i++)
                q = q->next;
            p->next = q->next;  //p是新开辟结点,q是要插入位置的直接前置结点
            q->next = p;
            head->stu_num++;
        }
        else if(index > head->stu_num)      //插入到末尾
        {
            while(q->next != NULL)
                q = q->next;
            q->next = p;
            p->next = NULL;
            head->stu_num++;
        }
    }
    
    
    //删除指定学生的信息
    void delete_stu(stu_info head)
    {
        int choice = -1;
        if(head->next == NULL)
            printf("学生列表为空\n");
        else
        {
            printf("\n请输入查找方式:1.按照学号查找;2.按照姓名查找;0.取消 : ");
            scanf("%d", &choice);
            switch(choice)
            {
                case 1: delete_num(head);break;
                case 2: delete_name(head);break;
                case 0: break;
                default: delete_stu(head);break;
            }
        }
    }
    
    //按照学号查找删除
    void delete_num(stu_info head)
    {
        int num;    //学生学号
        student_link p; //指向删除节点的前驱结点
        student_link q; //指向删除结点
        p = head->next;
        printf("\n请输入准备删除的学生的学号:");
        scanf("%d", &num);
        if(p->num == num)   //,判断是否是第一个结点,这里p指向删除结点
        {
            printf("该名同学信息如下:\n");
            printf("%-10d%-10s%-10c%-8.2f%-8.2f%-8.2f%-8.2f\n", p->num, \
                   p->name, p->sex, p->c_program, p->math, p->engl, p->aver);
            head->next = p->next;
            free(p);
            printf("该同学信息已经删除。\n");
            head->stu_num--;
        }
        else
        {
            while (p->next != NULL && p->next->num != num)    //这里p指向删除结点的直接前驱结点
                p = p->next;
            if (p->next == NULL)
                printf("查无此人\n");
            else
            {
                q = p->next;    //q指向删除结点
                printf("该名同学信息如下:\n");
                printf("%-10d%-10s%-10c%-8.2f%-8.2f%-8.2f%-8.2f\n", q->num, \
                   q->name, q->sex, q->c_program, q->math, q->engl, q->aver);
                p->next = q->next;
                free(q);
                printf("该同学信息已经删除。\n");
                head->stu_num--;
            }
        }
    }
    
    //按照姓名查找删除
    void delete_name(stu_info head)
    {
        student_link p, q;
        char name[20];
        int count = 0;  //记录同名人数
        printf("请输入需要删除的学生姓名:");
        scanf("%s", name);
        p = head->next;
        if(strcmp(p->name, name) == 0)  
        {
            printf("该名同学信息如下:\n");
            printf("%-10d%-10s%-10c%-8.2f%-8.2f%-8.2f%-8.2f\n", p->num, \
                   p->name, p->sex, p->c_program, p->math, p->engl, p->aver);
            head->next = p->next;
            printf("学生%s的信息已经被删除。\n", p->name);
            free(p);
            head->stu_num--;
        }
        else {
            q = p->next;
            while (q != NULL)
            {
                if (strcmp(q->name, name) == 0)
                {
                    printf("该名同学信息如下:\n");
                    printf("%-10d%-10s%-10c%-8.2f%-8.2f%-8.2f%-8.2f\n", q->num, \
                        q->name, q->sex, q->c_program, q->math, q->engl, q->aver);
                    p->next = q->next;
                    printf("学生%s的信息已经被删除。\n", q->name);
                    free(q);
                    q = p->next;
                    count++;
                    head->stu_num--;
                }
                else
                {
                    p = p->next;
                    q = q->next;
                }
            }
            if(count == 0)
                printf("查无此人。\n");
        }
    }
    
    
    
    
    
    展开全文
  • 在这里插入代码片 ...该函数利用scanf从输入中获取学生信息,并将其组织成单向链表链表节点结构定义如下: struct stud_node { int num; /*学号*/ char name[20]; /*姓名*/ int score; /*成绩*/ struct s
  • 建立学生信息链表

    2020-03-16 10:17:26
    该函数利用scanf从输入中获取学生信息,并将其组织成单向链表链表节点结构定义如下:struct stud_node { int num; /*学号*/ char name[20]; /*姓名*/ int score; /*成绩*/ struct stud_no...
  • 【C语言】链表学生信息的输入与输出,并输出他们成绩的平均值 描述:有若干个学生信息,包括学号、姓名、C语言成绩。其中,学号由11-15位数字组成;姓名为不超过50个字符的字符串、中间不含空格;C语言成绩为一...
  • C语言 简单链表创建 排序 输出

    千次阅读 2018-04-02 22:00:16
    #include&lt;stdio.h&gt; #include&lt;malloc.h&gt;//为动态分配提供函数库 typedef struct node { int num;...//创建链表 void sort();//排序 void print();//输出 node *head = ...
  • 6-1 建立学生信息链表

    2020-12-21 00:04:53
    编者注:考题版权归属版权方,作答代码版权归属编者...该函数利用scanf从输入中获取学生信息,并将其组织成单向链表链表节点结构定义如下: struct stud_node { int num; /*学号*/ char name[20]; /*姓名*/ int
  • 文章目录**6-1** **建立学生信息链表**(无表头,链表基础,指向)如何将输入的数据组织成一张链表函数接口定义:裁判测试程序样例:输入样例:输出样例:分析:解题思路:每次输入一组数据就利用动态存储分配函数...
  • 使用链表实现简单的学生信息录入系统,实例开发,链表运用
  • 链表储存学生信息然后排序输出

    千次阅读 2018-10-15 18:49:55
    要求输入3个人的信息,将他们按照年龄正序/逆序排序输出他们的信息。 下面是代码: 结构体模块: typedef struct Student{ long num; char name[8]; int age; char sex[5]; Student *next; }stu; 初始化模块 ...
  • 链表(创建,插入,删除打印输出 /*----------------------------------------------------------------------------- 时间:2011年9月28日 文件功能:实现了动态建立一个学生信息链表 包括链表创建 、 插入 、...
  • 该函数利用scanf从输入中获取学生信息,并将其组织成单向链表链表节点结构定义如下: struct stud_node { int num; /*学号*/ char name[20]; /*姓名*/ int score; /*成绩*/ struct stud_node *next
  • 定义恰当的结构体,并编程实现下列函数,main()函数将调用这些函数,实现学生链表创建、打印删除节点的功能; (1)create(n),从控制台输入n个学生的信息,建立链表存储这些信息,返回链表的头节点指针;学生...
  • 链表创建输出

    2017-07-19 17:47:31
    创建两个学生链表,含有姓名,年龄的信息,一个链表存放男生,一个链表存放女生 并且合并这两个链表。 #include #include #define LEN sizeof (struct student) struct student { char ...
  • 题目:PTA 实验11-2-1 建立学生信息链表 本题要求实现一个将输入的学生成绩组织成单向链表的简单函数。 函数接口定义: void input(); 该函数利用scanf从输入中获取学生信息,并将其组织成单向链表链表节点...
  • 从图中可以看出链表是由结构体指向结构体变量的指针组成。 构建链表的过程可以分解为两个部分:(1)开辟空间,构建只有一个节点的链表。(2)在链表中插入新的节点,扩充链表的长度。(编程的核心思想:将一个大...
  • All rights reserved.// 要求:写一个函数建立有3名学生数据的动态单向链表,并输出链表中每个结点的所有内容。/*建立动态链表的思想:1、开辟一个新结点,并使p1,p2指向它;2、读入一个学生数据给p1...
  • 学生信息链表

    千次阅读 2018-05-28 16:13:48
    #include<stdio.h> #include<string.h> #include<stdlib.h>...///本程序采用链表的操作,也就是不限空间 struct node { char num[20];///学号 char name[20];///姓名 char sex[20];//...
  • (1)创建信息链表并以磁盘文件保存; (2)读取磁盘文件并显示输出所有学生的籍贯信息; (3)按学号或姓名查询其籍贯; (4)按籍贯查询并输出该籍贯的所有学生; (5)能添加、删除修改学生的籍贯信息
  • 学生成绩排序与平均分计算利用c语言链表创建插入删除#include#include#define NULL 0#define LEN sizeof(struct student)struct student{long num;float score;struct student *next;};int n;struct student *creat...
  • 建立学生信息链表 (20分)

    千次阅读 2019-12-21 13:32:41
    建立学生信息链表 本题要求实现一个将输入的学生成绩组织成单向链表的简单函数。 函数接口定义: void input(); 该函数利用scanf从输入中获取学生信息,并将其组织成单向链表链表节点结构定义如下: ...
  • 主要介绍了C语言实现带头结点的链表创建、查找、插入、删除操作方法,对于了解数据结构中链表的各项操作有很好的借鉴价值,需要的朋友可以参考下
  • 8-6-7 建立学生信息链表 (20 分) 本题要求实现一个将输入的学生成绩组织成单向链表的简单函数。 函数接口定义: void input(); 该函数利用scanf从输入中获取学生信息,并将其组织成单向链表链表节点结构定义...
  • struct Student //学生信息结构 { char name[10]; int num; int math; }; struct Node //定义结点结构 { struct Student data;//student作为结构体变量 struct Node *next; }; struct Node *CreateList() //...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,627
精华内容 5,050
关键字:

学生信息链表的创建和输出