数据结构(一)

一、概念

程序 = 数据结构 + 算法

​ 数据结构:研究数据与数据之间的关系

​ 学习数据结构,可以帮助我们更好构建模型,从而提高程序的运行效率

数据:能够输入计算机,并且能够被计算机,识别、处理、运算输出的符号的总称

数据元素:是组成数据的基本单位,一个数据元素可以记为一条记录

数据项:每一个数据元素是由若干数据项组成

结构:

​ 1、逻辑结构

​ 集合:

​ 线性结构:第一个元素没有前驱,最后一个元素没有后继,中间元素有唯一前驱和唯一后继

​ 树形结构:第一个元素没有前驱,最后一个元素没有后继,中间元素有唯一前驱,可以有多个后继

​ 图形结构:元素与元素都可能有关联

​ 2、存储结构

​ 顺序存储:数据在内存中连续存储

​ 链式存储:数据在内存中可以连续存储,也可以不连续。

​ 在当前元素中存放下一个元素的地址即可

​ 索引:

​ Hash:

​ 3、算法

​ 算法的特性:有穷性、确定性、可行性、输入、输出

​ 语句频度:一个语句在程序中重复执行的次数

​ 时间复杂度:所有可执行的语句频度之和

​ 评判一个算法的优劣:

​ 事后统计法:在程序运行结束之后,统计执行时间

​ 事前估计法(大O计法):计算一个程序的时间复杂度,将时间复杂度的表达式,保留最高次幂的项,去掉系数、得到结果。

​ 例:

​ 3n^3 + 2n^2 + n +3 --> O(n^3)

​ 特殊的,如果时间复杂度为常数,则记为O(1)

二、顺序表

​ 逻辑结构:线性结构

​ 存储结构:顺序存储

1、顺序表的相关结构体表示:
//struct book
//{
//    char name[50];
//};
//struct book a[10];

#define N 10
typedef int data_t;
typedef struct seqlist
{
	data_t data[N];  //定义的元素
	int last; //last为表尾指针,记录顺序表中最后一个元素的下标
}Seqlist;

//Seqlist list;
2、顺序表实现的功能:

​ (1)创建顺序表 – Seqlist *Seqlist_Create();

​ (2)插入元素 – void Seqlist_Insert_Pos(Seqlist *list, int pos, data_t data);

​ (3)删除元素 – void Seqlist_Delete_Pos( Seqlist *list, int pos); //按位置删除

​ – void Seqlist_Delete_Data( Seqlist *list,data_t data); //按值删除

​ (4)修改元素 – void Seqlist_Update_Pos(Seqlist *list, int pos, data_t new_data); //按位置修改

​ – void Seqlist_Update_Data(Seqlist *list, data_t old_data, data_t new_data); //按值修改

​ (5)查找元素 – data_t Seqlist_Search_Pos(Seqlist *list, int pos); //按位置查找

​ – int Seqlist_Search_Data(Seqlist *list, data_t data); //按值查找

​ (6)清空表 – void Seqlist_Clear(Seqlist *list);

​ (7)删除表 – void Seqlist_Destory(Seqlist *list);

​ (8)判空 – int Seqlist_Is_Empty(Seqlist *list);

​ (9)判满 – int Seqlist_Is_Full(Seqlist *list);

​ (10)打印表 – void Seqlist_Show(Seqlist *list);

作业:实现顺序表的创建、插入、删除(任选一个)、打印、判空、判满

main.c

/*===============================================
*   文件名称:main.c
*   创 建 者:     
*   创建日期:2024年03月20日
*   描    述:
================================================*/
#include <stdio.h>
#include "seqlist.h"

int main(int argc, char *argv[])
{ 
    Seqlist *list = Seqlist_Create();
    printf("list = %p\n", list);

    return 0;
} 

seqlist.c

/*===============================================
*   文件名称:seqlist.c
*   创 建 者:     
*   创建日期:2024年03月20日
*   描    述:
================================================*/
#include "seqlist.h"


Seqlist *Seqlist_Create()
{
	Seqlist *list = (Seqlist *)malloc(sizeof(Seqlist)); //在堆区给顺序表开辟空间
	if(NULL == list)
	{
		printf("malloc failed!\n");
		return NULL;
	}
	
	list->last = -1;   //将表尾指针赋值为-1,表示初始的顺序表为空表
	
	return list;   //返回顺序表的首地址
}
//void Seqlist_Insert_Pos(Seqlist *list, int pos,  data_t data); //按位置插入
//void Seqlist_Delete_Pos( Seqlist *list, int pos);  //按位置删除
//void Seqlist_Delete_Data( Seqlist *list,data_t data);  //按值删除
//void Seqlist_Show(Seqlist *list); //打印表
/*===============================================
*   文件名称:seqlist.h
*   创 建 者:     
*   创建日期:2024年03月20日
*   描    述:
================================================*/

#ifndef  __SEQLIST_H__ 
#define  __sEQLIST_H__

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>

#define N 50
typedef int data_t;
typedef struct seqlist   //定义顺序表的类型
{
    data_t data[N];  
    int last;  //表尾指针,记录当前表中最后一个元素的下标
}Seqlist;



Seqlist *Seqlist_Create();
void Seqlist_Insert_Pos(Seqlist *list, int pos,  data_t data); //按位置插入
void Seqlist_Delete_Pos( Seqlist *list, int pos);  //按位置删除
void Seqlist_Delete_Data( Seqlist *list,data_t data);  //按值删除
void Seqlist_Show(Seqlist *list); //打印表


#endif

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式石油工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值