C语言实现学生管理系统(顺序表版)

简介: C语言实现学生管理系统(顺序表版)

前言

涉及知识


使用语言:C语言


数据结构类型:顺序表

内容导图

在这里插入图片描述

效果展示

在这里插入图片描述

静态管理系统

菜单的实现

完成一个小项目,我们首先要明确它有那些功能,并且我们需要告诉明确的告诉用户这些功能。而菜单恰恰能够实现和用户的交互。但是,如果我们把菜单直接写在main函数里面就会显得非常的臃肿,所以我们可以把菜单封装成一个函数

void menu()
{
    printf("********************************\n");
    printf("*******欢迎进入学生管理系统*****\n");
    printf("*********0.退出管理系统*********\n");
    printf("*********1.增加学生信息*********\n");
    printf("*********2.删除学生信息*********\n");
    printf("*********3.查找学生信息*********\n");
    printf("*********4.修改学生信息*********\n");
    printf("*********5.打印学生信息*********\n");
    printf("********************************\n");
}

选择功能实现

有了菜单还不够,我们需要让菜单的每一个选项都有对应的功能。
因为每个功能都还没用函数进行实现,所以我们可以先用其他东西代替测试。比如我需要添加一个学生的信息,因为我还没开始实现我的增加学生这个函数,我们可以先打印一句话来确定。选择功能的这个函数有没有出问题。
写完选择功能,我们可以把他和菜单函数一起放在main函数中测试一下。

int main()
{
    int input=0;

    do
    {
        menu();
        printf("请选择功能:");
        scanf("%d", &input);
        switch (input)
        {
        case 1:printf("增加\n"); break;
        case 2:printf("删除\n"); break;
        case 3:printf("查找\n"); break;
        case 4:printf("修改\n"); break;
        case 5:printf("排序\n"); break;
        case 6:printf("打印\n"); break;
        default:printf("选项输入有误!\n"); break;
        }
    } while (input);
    return 0;
}

在这里插入图片描述


测试正常,选择功能并没有出错,所以我们接下来需要分类实现一个个实现对应功能的函数。

静态开辟空间

每一位学生都有很多信息,所以符合结构体的特性。我们可以定义一个结构体类型。

typedef struct StudentInfo
{
    char name[NAME];//姓名
    char sex[SEX];//性别
    int id;//学号
    int age;//年纪
    int score;//分数
}Student;

接下来,继续开辟一个结构体,里面还要存放上面的结构体的数组

//静态开辟100个数组
#define MAX 100
typedef struct ClassInfo
{
    Student data[MAX];
    size_t size;
}Class;

实现增删功能

增加功能实现

静态开辟空间的最大缺陷就是内存有限,不能随需而增加。
所以我们在是实现该增加函数的时候,必须要先判断他的内存是不是已经满了。

void ClassAdd(Class* psl)
{
    assert(psl);
    if (psl->size == MAX)
    {
        printf("该学生管理系统内存已满,请清理!\n");
        return;
    }
    printf("请输入学生姓名:");
    scanf("%s", &psl->data[psl->size].name);
    printf("请输入学生性别:");
    scanf("%s", &psl->data[psl->size].sex);
    printf("请输入学生年纪:");
    scanf("%d", &psl->data[psl->size].age);
    printf("请输入学生分数:");
    scanf("%d", &psl->data[psl->size].score);
    printf("请输入学生学号:");
    scanf("%d", &psl->data[psl->size].id);
    psl->size++;
    printf("添加信息成功!\n");
}

删除功能实现

想删除一个数,那就必须得先找到这个数,找到某个数所在的位置,这个需求,在其他的功能的实现中也是被需要的。所以我们可以把它封装为一个函数,便于实现其他功能的时候可以使用。
我们使用循环,遍历数组中的所有内容。找到了就返回下标,找不到就返回-1

int Find_name(Class* psl, char name[])
{
    int i = 0;
    for (i = 0; i < psl->size; i++)
    {
        if (0 == strcmp(psl->data[i].name, name))
        {
            return i;
        }
    }
    return -1;
}

有了查找位置的功能,再去实现删除函数就显得容易很多了。
当然,值得注意的是,顺序表要保证数据的连续性,你删除某个数,并不是删除它所在位置的空间,而是用后面的数来覆盖掉它,并且删除掉最后面的一个空间。以此来保证数据的连续性。

void ClassDel(Class* psl)
{
    assert(psl);
    char name[NAME];
    printf("请输入你要删除学生的姓名:");
    scanf("%s", &name);
    int ret = Find_name(psl, name);
    if (-1 == ret)
        printf("你输入的学生不存在!\n");
    else
    {
        for (int i = ret; i < psl->size - 1; i++)
        {
            psl->data[i] = psl->data[i + 1];
        }
        psl->size--;
        printf("成功删除指定联系人\n");
    }
}

实现查找功能

这个功能就用到了上面我们实现的查找位置函数了。我们只要查找到需要被查找到的数的位置,并打印该位置的数,就可以了。

void ClassSearch(Class* psl)
{
    assert(psl);
    char name[NAME];
    printf("请输入你要查找的学生的姓名:");
    scanf("%s", &name);
    int ret = Find_name(psl, name);
    if (-1 == ret)
        printf("你要查找的学生不存在!\n");
    else
    {
        printf("%-5s\t%-5s\t%-5s\t%-20s\t%-10s\n", "姓名", "性别", "年龄", "学号", "总分");
        printf("%-5s\t%-5s\t%-5d\t%-20d\t%-10d\n", psl->data[ret].name,
            psl->data[ret].sex,
            psl->data[ret].age,
            psl->data[ret].id,
            psl->data[ret].score);
    }
}

实现修改功能

和查找功能一样,想修改一个数,我们必须要找到这个数的。

void ClassModi(Class* psl)
{
    printf("请输入要修改人的名字:>");
    char name[NAME];
    scanf("%s", name);
    int ret = Find_name(psl, name);
    if (ret == -1)
        printf("要修改的人不存在\n");
    else
    {
        printf("请输入学生姓名:");
        scanf("%s", &psl->data[ret].name);
        printf("请输入学生性别:");
        scanf("%s", &psl->data[ret].sex);
        printf("请输入学生年纪:");
        scanf("%d", &psl->data[ret].age);
        printf("请输入学生分数:");
        scanf("%d", &psl->data[ret].score);
        printf("请输入学生学号:");
        scanf("%d", &psl->data[ret].id);
        printf("修改成功\n");
    }
}

实现排序功能

实现排序的方法有很多,这里我使用的是大家最常用的冒泡排序法。
我这里以分数作为的排序标准。
感兴趣的也可以以学号或者年纪作为排序标准。

void Score_sqrt(Class* psl)
{
    Student tmp;
    for (int i = 0; i < psl->size; i++)
    {
        for (int j = 0; j < psl->size; j++)
        {
            if (psl->data[j].score < psl->data[j + 1].score)
            {
                tmp = psl->data[j];
                psl->data[j] = psl->data[j + 1];
                psl->data[j + 1] = tmp;
            }
        }
    }
    printf("排序完成!\n");
}

动态管理系统

动态开辟空间

静态的管理系统最大的缺点就是不能自主的扩容,很麻烦。
所以这里我们可以使用动态的顺序表来修改开辟空间的这一个过程。
当然其他功能还都可以用上述的函数实现,最后面我们会汇总代码。

typedef struct ClassInof
{
    Student *data;
    size_t size; //现有数据
    size_t capacity;//最大容量
}Class;

动态的初始化

void ClassInit(Class* psl)
{
    assert(psl);//断言防止其为空指针
    psl->data = NULL;//讲该指针置空
    psl->size = 0;//设置有效数据个数为0
    psl->capacity = 0;//设置空间容量为0
}

动态扩容函数

我们可以通过realloc函数根据我们需要多少空间来进行动态开辟。

void ClassAddcapacity(Class* psl)
{
    assert(psl);

    if (psl->size == psl->capacity)
    {
        int newCapacity = psl->capacity == 0 ? 4 : psl->capacity * 2;
        Student* tmp = (Student*)realloc(psl->data, newCapacity * sizeof(Student));
        if (tmp == NULL)
        {
            perror("realloc fail");
            exit(-1);
        }

        psl->data = tmp;
        psl->capacity = newCapacity;
    }
}

动态增加函数

这个增加数据的函数,就是和静态管理系统的其他功能唯一不一样的地方了。
其他的功能的实现和静态版本的一模一样,无需修改。

void ClassAdd(Class* psl)
{
    assert(psl);
    ClassAddcapacity( psl);
    printf("请输入学生姓名:");
    scanf("%s", &psl->data[psl->size].name);
    printf("请输入学生性别:");
    scanf("%s", &psl->data[psl->size].sex);
    printf("请输入学生年纪:");
    scanf("%d", &psl->data[psl->size].age);
    printf("请输入学生分数:");
    scanf("%d", &psl->data[psl->size].score);
    printf("请输入学生学号:");
    scanf("%d", &psl->data[psl->size].id);
    psl->size++;
    printf("添加信息成功!\n");
}

总代码汇总

静态管理系统汇总

头文件:student.h

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#define NAME 50
#define SEX 100
#define MAX 100
//学生信息结构
typedef struct StudentInfo
{
    char name[NAME];//姓名
    char sex[SEX];//性别
    int id;//学号
    int age;//年纪
    int score;//分数
}Student;
//静态开辟的数组
typedef struct ClassInfo
{
    Student data[MAX];
    size_t size;
}Class;
//菜单函数的声明
void menu();
//初始化函数的声明
void ClassInit(Class* psl);
//增加函数的声明
void ClassAdd(Class* psl);
//打印函数的声明
void ClassPrint(Class* psl);
//删除函数的声明
void ClassDel(Class* psl);
//查找函数的声明
void ClassSearch(Class* psl);
//修改函数的声明
void ClassModi(Class* psl);
//排序函数的声明
void Score_sqrt(Class* psl);

函数实现:student.c

#include"Student.h"
void menu()
{
    printf("********************************\n");
    printf("*******欢迎进入学生管理系统*****\n");
    printf("*********0.退出管理系统*********\n");
    printf("*********1.增加学生信息*********\n");
    printf("*********2.删除学生信息*********\n");
    printf("*********3.查找学生信息*********\n");
    printf("*********4.修改学生信息*********\n");
    printf("*********5.成绩排序信息*********\n");
    printf("*********6.打印学生信息*********\n");
    printf("********************************\n");
}
//静态初始化
void ClassInit(Class* psl)
{
    assert(psl);
    psl->size = 0;
    memset(psl->data, 0, MAX * sizeof(Student));
}
//增加函数的实现
void ClassAdd(Class* psl)
{
    assert(psl);
    if (psl->size == MAX)
    {
        printf("该学生管理系统内存已满,请清理!\n");
        return;
    }
    printf("请输入学生姓名:");
    scanf("%s", &psl->data[psl->size].name);
    printf("请输入学生性别:");
    scanf("%s", &psl->data[psl->size].sex);
    printf("请输入学生年纪:");
    scanf("%d", &psl->data[psl->size].age);
    printf("请输入学生分数:");
    scanf("%d", &psl->data[psl->size].score);
    printf("请输入学生学号:");
    scanf("%d", &psl->data[psl->size].id);
    psl->size++;
    printf("添加信息成功!\n");
}
//打印函数的实现
void ClassPrint(Class* psl)
{
    int i = 0;
    printf("%-5s\t%-5s\t%-5s\t%-20s\t%-10s\n", "姓名", "性别", "年龄", "学号", "总分");
    for (i = 0; i < psl->size; i++)
    {
        printf("%-5s\t%-5s\t%-5d\t%-20d\t%-10d\n", psl->data[i].name,
            psl->data[i].sex,
            psl->data[i].age,
            psl->data[i].id,
            psl->data[i].score);
    }
}
//查找位置的函数
int Find_name(Class* psl, char name[])
{
    int i = 0;
    for (i = 0; i < psl->size; i++)
    {
        if (0 == strcmp(psl->data[i].name, name))
        {
            return i;
        }
    }
    return -1;
}
//删除函数的实现
void ClassDel(Class* psl)
{
    assert(psl);
    char name[NAME];
    printf("请输入你要删除学生的姓名:");
    scanf("%s", &name);
    int ret = Find_name(psl, name);
    if (-1 == ret)
        printf("你输入的学生不存在!\n");
    else
    {
        for (int i = ret; i < psl->size - 1; i++)
        {
            psl->data[i] = psl->data[i + 1];
        }
        psl->size--;
        printf("成功删除指定联系人\n");
    }
}
//查找学生函数的实现
void ClassSearch(Class* psl)
{
    assert(psl);
    char name[NAME];
    printf("请输入你要查找的学生的姓名:");
    scanf("%s", &name);
    int ret = Find_name(psl, name);
    if (-1 == ret)
        printf("你要查找的学生不存在!\n");
    else
    {
        printf("%-5s\t%-5s\t%-5s\t%-20s\t%-10s\n", "姓名", "性别", "年龄", "学号", "总分");
        printf("%-5s\t%-5s\t%-5d\t%-20d\t%-10d\n", psl->data[ret].name,
            psl->data[ret].sex,
            psl->data[ret].age,
            psl->data[ret].id,
            psl->data[ret].score);
    }
}
//修改函数的实现
void ClassModi(Class* psl)
{
    printf("请输入要修改人的名字:>");
    char name[NAME];
    scanf("%s", name);
    int ret = Find_name(psl, name);
    if (ret == -1)
        printf("要修改的人不存在\n");
    else
    {
        printf("请输入学生姓名:");
        scanf("%s", &psl->data[ret].name);
        printf("请输入学生性别:");
        scanf("%s", &psl->data[ret].sex);
        printf("请输入学生年纪:");
        scanf("%d", &psl->data[ret].age);
        printf("请输入学生分数:");
        scanf("%d", &psl->data[ret].score);
        printf("请输入学生学号:");
        scanf("%d", &psl->data[ret].id);
        printf("修改成功\n");
    }
}
//排序函数的实现(冒泡)
void Score_sqrt(Class* psl)
{
    Student tmp;
    for (int i = 0; i < psl->size; i++)
    {
        for (int j = 0; j < psl->size; j++)
        {
            if (psl->data[j].score < psl->data[j + 1].score)
            {
                tmp = psl->data[j];
                psl->data[j] = psl->data[j + 1];
                psl->data[j + 1] = tmp;
            }
        }
    }
    printf("排序完成!\n");
}

功能实现:test.c

#include"Student.h"
int main()
{
    int input=0;
    Class class;
    ClassInit(&class);
    do
    {
        menu();
        printf("请选择功能:");
        scanf("%d", &input);
        switch (input)
        {
        case 1:ClassAdd(&class); break;
        case 2:ClassDel(&class); break;
        case 3:ClassSearch(&class); break;
        case 4:ClassModi(&class); break;
        case 5:Score_sqrt(&class); break;
        case 6:ClassPrint(&class); break;
        default:printf("选项输入有误!\n"); break;
        }
    } while (input);
    return 0;
}

动态管理系统汇总

头文件:student.h

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#define NAME 100
#define SEX 50
//学生基本信息
typedef struct StudentInof
{
    char name[NAME];//姓名
    char sex[SEX];//性别
    int id;//学号
    int age;//年纪
    int score;//分数
}Student;
//动态顺序表
typedef struct ClassInof
{
    Student *data;
    size_t size; //现有数据
    size_t capacity;//最大容量
}Class;

void menu();
//初始化函数的声明
void ClassInit(Class* psl);
//增加容量声明
void ClassAddcapacity(Class* psl);
//增加函数的声明
void ClassAdd(Class* psl);
//打印函数的声明
void ClassPrint(Class* psl);
//删除函数的声明
void ClassDel(Class* psl);
//查找函数的声明
void ClassSearch(Class* psl);
//修改函数的声明
void ClassModi(Class* psl);
//排序函数的声明
void Score_sqrt(Class* psl);

函数实现:stduent2.c

#include"student.h"
//菜单的定义
void menu()
{
    printf("********************************\n");
    printf("*******欢迎进入学生管理系统*****\n");
    printf("*********0.退出管理系统*********\n");
    printf("*********1.增加学生信息*********\n");
    printf("*********2.删除学生信息*********\n");
    printf("*********3.查找学生信息*********\n");
    printf("*********4.修改学生信息*********\n");
    printf("*********5.成绩排序信息*********\n");
    printf("*********6.打印学生信息*********\n");
    printf("********************************\n");
}
//动态初始化
void ClassInit(Class* psl)
{
    assert(psl);//断言防止其为空指针
    psl->data = NULL;//讲该指针置空
    psl->size = 0;//设置有效数据个数为0
    psl->capacity = 0;//设置空间容量为0
}
//动态扩容
void ClassAddcapacity(Class* psl)
{
    assert(psl);

    if (psl->size == psl->capacity)
    {
        int newCapacity = psl->capacity == 0 ? 4 : psl->capacity * 2;
        Student* tmp = (Student*)realloc(psl->data, newCapacity * sizeof(Student));
        if (tmp == NULL)
        {
            perror("realloc fail");
            exit(-1);
        }

        psl->data = tmp;
        psl->capacity = newCapacity;
    }
}
//增加数据函数定义
void ClassAdd(Class* psl)
{
    assert(psl);
    ClassAddcapacity( psl);
    printf("请输入学生姓名:");
    scanf("%s", &psl->data[psl->size].name);
    printf("请输入学生性别:");
    scanf("%s", &psl->data[psl->size].sex);
    printf("请输入学生年纪:");
    scanf("%d", &psl->data[psl->size].age);
    printf("请输入学生分数:");
    scanf("%d", &psl->data[psl->size].score);
    printf("请输入学生学号:");
    scanf("%d", &psl->data[psl->size].id);
    psl->size++;
    printf("添加信息成功!\n");
}
//打印函数的定义
void ClassPrint(Class* psl)
{
    int i = 0;
    printf("%-5s\t%-5s\t%-5s\t%-20s\t%-10s\n", "姓名", "性别", "年龄", "学号", "总分");
    for (i = 0; i < psl->size; i++)
    {
        printf("%-5s\t%-5s\t%-5d\t%-20d\t%-10d\n", psl->data[i].name,
            psl->data[i].sex,
            psl->data[i].age,
            psl->data[i].id,
            psl->data[i].score);
    }
}
//查找位置的函数
int Find_name(Class* psl, char name[])
{
    int i = 0;
    for (i = 0; i < psl->size; i++)
    {
        if (0 == strcmp(psl->data[i].name, name))
        {
            return i;
        }
    }
    return -1;
}
//删除函数的实现
void ClassDel(Class* psl)
{
    assert(psl);
    char name[NAME];
    printf("请输入你要删除学生的姓名:");
    scanf("%s", &name);
    int ret = Find_name(psl, name);
    if (-1 == ret)
        printf("你输入的学生不存在!\n");
    else
    {
        for (int i = ret; i < psl->size - 1; i++)
        {
            psl->data[i] = psl->data[i + 1];
        }
        psl->size--;
        printf("成功删除指定联系人\n");
    }
}
//查找学生函数的实现
void ClassSearch(Class* psl)
{
    assert(psl);
    char name[NAME];
    printf("请输入你要查找的学生的姓名:");
    scanf("%s", &name);
    int ret = Find_name(psl, name);
    if (-1 == ret)
        printf("你要查找的学生不存在!\n");
    else
    {
        printf("%-5s\t%-5s\t%-5s\t%-20s\t%-10s\n", "姓名", "性别", "年龄", "学号", "总分");
        printf("%-5s\t%-5s\t%-5d\t%-20d\t%-10d\n", psl->data[ret].name,
            psl->data[ret].sex,
            psl->data[ret].age,
            psl->data[ret].id,
            psl->data[ret].score);
    }
}
//修改函数的实现
void ClassModi(Class* psl)
{
    printf("请输入要修改人的名字:>");
    char name[NAME];
    scanf("%s", name);
    int ret = Find_name(psl, name);
    if (ret == -1)
        printf("要修改的人不存在\n");
    else
    {
        printf("请输入学生姓名:");
        scanf("%s", &psl->data[ret].name);
        printf("请输入学生性别:");
        scanf("%s", &psl->data[ret].sex);
        printf("请输入学生年纪:");
        scanf("%d", &psl->data[ret].age);
        printf("请输入学生分数:");
        scanf("%d", &psl->data[ret].score);
        printf("请输入学生学号:");
        scanf("%d", &psl->data[ret].id);
        printf("修改成功\n");
    }
}
//排序函数的实现(冒泡)
void Score_sqrt(Class* psl)
{
    Student tmp;
    for (int i = 0; i < psl->size; i++)
    {
        for (int j = 0; j < psl->size; j++)
        {
            if (psl->data[j].score < psl->data[j + 1].score)
            {
                tmp = psl->data[j];
                psl->data[j] = psl->data[j + 1];
                psl->data[j + 1] = tmp;
            }
        }
    }
    printf("排序完成!\n");
}

功能的实现:test.c

#include"student.h"
int main()
{
    int input = 0;
    Class class;
    ClassInit(&class);
    do
    {
        menu();
        printf("请选择功能:");
        scanf("%d", &input);
        switch (input)
        {
        case 1:ClassAdd(&class); break;
        case 2:ClassDel(&class); break;
        case 3:ClassSearch(&class); break;
        case 4:ClassModi(&class); break;
        case 5:Score_sqrt(&class); break;
        case 6:ClassPrint(&class); break;
        default:printf("选项输入有误!\n"); break;
        }
    } while (input);
    return 0;
}
相关文章
|
1月前
|
存储 安全 数据管理
C语言之考勤模拟系统平台(千行代码)
C语言之考勤模拟系统平台(千行代码)
55 4
|
1月前
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别
pymalloc 和系统的 malloc 有什么区别
|
20天前
|
IDE 编译器 开发工具
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
在本文中,我们系统地讲解了常见的 `#pragma` 指令,包括其基本用法、编译器支持情况、示例代码以及与传统方法的对比。`#pragma` 指令是一个强大的工具,可以帮助开发者精细控制编译器的行为,优化代码性能,避免错误,并确保跨平台兼容性。然而,使用这些指令时需要特别注意编译器的支持情况,因为并非所有的 `#pragma` 指令都能在所有编译器中得到支持。
93 41
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
|
15天前
|
存储 编译器 C语言
【C语言】C语言的变量和声明系统性讲解
在C语言中,声明和定义是两个关键概念,分别用于告知编译器变量或函数的存在(声明)和实际创建及分配内存(定义)。声明可以多次出现,而定义只能有一次。声明通常位于头文件中,定义则在源文件中。通过合理组织头文件和源文件,可以提高代码的模块化和可维护性。示例包括全局变量、局部变量、函数、结构体、联合体、数组、字符串、枚举和指针的声明与定义。
44 12
|
26天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
43 1
|
26天前
|
人工智能 安全 算法
基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。
本文深入探讨了基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。C语言因其高效、可移植、灵活及成熟度高等特点,在嵌入式系统开发中占据重要地位。文章还介绍了从系统需求分析到部署维护的完整开发流程,以及中断处理、内存管理等关键技术,并展望了嵌入式系统在物联网和人工智能领域的未来发展。
60 1
|
1月前
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别?
pymalloc 和系统的 malloc 有什么区别?
|
1月前
|
存储 C语言
【数据结构】顺序表(c语言实现)(附源码)
本文介绍了线性表和顺序表的基本概念及其实现。线性表是一种有限序列,常见的线性表有顺序表、链表、栈、队列等。顺序表是一种基于连续内存地址存储数据的数据结构,其底层逻辑是数组。文章详细讲解了静态顺序表和动态顺序表的区别,并重点介绍了动态顺序表的实现,包括初始化、销毁、打印、增删查改等操作。最后,文章总结了顺序表的时间复杂度和局限性,并预告了后续关于链表的内容。
82 3
|
2月前
|
存储 C语言
探索C语言数据结构:利用顺序表完成通讯录的实现
本文介绍了如何使用C语言中的顺序表数据结构实现一个简单的通讯录,包括初始化、添加、删除、查找和保存联系人信息的操作,以及自定义结构体用于存储联系人详细信息。
38 2
|
2月前
|
C语言
链式顺序表实现(C语言描述)
本文介绍了如何在C语言中实现链式顺序表,包括数据结构的定义、节点的创建、数据的插入和删除以及链表的打印和销毁。
49 2