Skip to content

Latest commit

 

History

History
126 lines (95 loc) · 3.21 KB

C-语言-考核题目.md

File metadata and controls

126 lines (95 loc) · 3.21 KB

C-语言-考核题目

1.使用链表实现两个1000 * 1000的矩阵相乘

wotou.jpg

2.通过指针将一个单链表倒序

  • 创建新链表
  • 在已有链表的基础上将原链表内容倒序

3.宿舍管理系统

使用链表和结构体实现对学生宿舍信息的录入,学生的信息包括:

  • 姓名
  • 学号
  • 年龄
  • 性别
  • 宿舍号
  • 床号

并且实现如下功能:

  • 录入:

    通过键盘录入每个学生的具体信息

  • 输出:

    遍历整个链表将所有学生信息输出

  • 查询:

    按学号进行查询,并输出该学生的所有信息

  • 插入:

    录入学生信息,并将该学生插入到链表的指定位置

  • 删除: 删除指定位置上的学生信息

  • 使用文件存储整个链表的所有学生信息

  • 在运行时主动判断是否已有保存的文件,如果有就从文件中输入,恢复之前的链表,输出学生信息


链表创建的步骤简介 (以下代码仅供参考):

  • 首先构造学生的结构体
// 这里只定义一个数据
typedef struct Student_info{
    int a;  //这里先定义一个int型的数据
    struct Student_info *next; //定义结构体指针
} Stu
  • 动态创建

    这里写了一个结构体中只有一个数据的链表的创建的例子首先从键盘获取想要录入的学生个数 m 
    创建链表需要三个指针p_head指向头节点p_new指向新创建结构体q指针用于连接链表
    for(int i = 0;i < m;i ++)
    {
        int data = 0;  //定义常量用来保存结构体里的信息,这里只有 a 
        scanf("%d",&data); 
        p = (Stu *)malloc(sizeof(Stu));
        p->a = data;  //为新开辟结点赋值
        p->next = NULL;
        if(a == 1)  //如果是第一个结点,即链表还没有形成,p_head跟q都指向p,因为只有一个节点;
        {
            p_head = p;
            q = p;
        }
        else 
        {
            q->next = p;  //链表已经存在,就将q的next指针指向新开辟的新的结构体
            q = p;  //将指针q指向p,也就是现在这个链表的最后一个结点,用于下次循环,链接新的结点
        }
    }
    //这样就创建了一个储存了m个学生信息的链表,这里的学生信息只有一个a,只做演示
  • 遍历输出

    仿照这个例子void printf(Stu *p_head)  //传入链表的头节点
    {
    	Stu *p = p_head;  //定义结构体指针指向头节点
        ifp//想一下这里,是p还是p->next
        {
        	printf("链表为空!\n");
        	exit(0);
        }
        //如果到最后一个结点,while(p)还是ture,然后打印出最后一个结点的值,p = p->next(NULL)
        //之后就跳出循环
        while(p)  
        {    
        	printf("%d ",p->a);
        	p = p->next;
        }
        printf("\n");
    }
    //这样就打印出了链表中的信息
  • 查询

    仿照下面的这个例子void (Stu *p_head,int a)  //在链表中查找值为a的结点,并打印全部所属信息
    {
        Stu *p = p_head;
        while(p && p->a != a)
        	p = p->next;
        printf("%d...",p->a...);
    }