2022 C语言数据结构总结浅浅入门(1)基础概念与顺序表

基础概念:(1 )节点:  数据结构中的每个元素
                  (2 )前驱:  某个节点前面的节点  (3 )后继:  某个节点后面的节点


数据结构分类:线性结构,树形结构,图形结构
1.线性结构:在存储关系上,每个元素最多有一个前驱,一个后继 

例:数组 列表 队列 堆栈(ps:例子先记住,不管你会不会先知道他们的分类)
2.树形结构:在存储关系上,每个元素最多有一个前驱,但可以有多个后继

例:二叉树
3.图形结构:在存储关系上,每个元素可以有多个前驱,多个后继

算法(完成一个功能,所用的程序)

算法复杂度取决于时间复杂度与空间复杂度,一般来说,时间复杂度与空间复杂度越低越好,越高效。

1)时间复杂度(运行速度是否快)

例1:

for(i = 0; i < n; i++)
{
    for(j = 0; j < n; j++)
    {
        ;//虽然是空白但确实属于已处理状态,此代码以下代码同理部分不予注释。
    }
}

以上的时间复杂度为
T(n) = O(n^2)   //  执行此数  n * n次,比如冒泡排序: 时间复杂度 O(n^2)

例2:

for(i = 0; i < n; i++)
{
    for(j = 0; j < n; j++)
    {
        for(k = 0; k < n; k++)
        {
            ;
        }
    }
}

T(n) = O(n^3)   //   执行此数  n * n * n次

例3:

for(i = 0; i < n; i++)
{

}
for(j = 0; j < n; j++)
{

}

T(n) = O(2 * n)   //  执行此数 n + n次

2)  空间复杂度(运行程序需要的空间大小)
//需要内存越少越好

1 线性表(每一个节点都有一个前驱和一个后继,首节点和尾节点除外)
1)顺序表(数据存储时是连续存放的,典型的是数组)

主要用数组来存储顺序表

练习:
用数组来存储学生成绩(线性表)
  int score[20] = {56, 62, 74, 83};
  1) 编写一个函数, 能向数组中插入数据  如:位置2, 成绩为65
#include <stdio.h>
void insert(int *p, int x, int pos)
{
    int i;
    for(i = 3; i >= pos; i--)
    {
        p[i + 1] = p[i];
    }
    p[pos] = x;
}
int main()
{
    int i, score[20] = {56, 62, 74, 83};
    insert(score, 65, 2);
    for(i = 0; i < 5; i++)    
    {
        printf("%d\n", score[i]);    //56 62 65 74 84
    }
}

2) 再编写一个函数,能从数组中删除一个元素
#include <stdio.h>
void insert(int *p, int x, int pos)
{
    int i;
    for(i = 3; i >= pos; i--)
    {
        p[i + 1] = p[i];
    }
    p[pos] = x;
}
void delete(int *p, int pos)
{
    int i;
    for(i = pos; i < 5; i++)
    {
        p[i] = p[i + 1];
    }
}
int main()
{
    int i, score[20] = {56, 62, 74, 83};
    insert(score, 65, 2);
    for(i = 0; i < 5; i++)    
        printf("%d\n", score[i]);    //56 62 65 74 84
    delete(score, 2);
    for(i = 0; i < 4; i++)    
        printf("%d\n", score[i]);    //56 62 74 84
}
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值