数据结构总结

数据结构

数据结构:研究的是数据逻辑结构,存储结构及其操作

逻辑结构:数据元素与数据元素之间的关系

线性关系

一对一

树形关系 

一对多,或一对二(二叉树)

图状关系

多对多

存储结构

1.顺序存储:顺序并且连续存储

顺序存储:在逻辑上相邻的元素,在物理空间上也相邻

优点:查找方便,

存储空间的利用率可以达到1 缺点:插入和删除不方便,

申请空间的时候,必须是一片连续的空间,对空间的要求比较高

会用空间碎片的产生

2.链式存储

链式存储:在逻辑上相邻的元素,在物理空间上不一定相邻

优点:插入元素不需要移动大量的空间

对空间的要求没那么大,

缺点:查找不方便

存储空间的利用率不足1,没有顺序存储的大

3.索引存储

索引存储:依据索引表查找数据大概位置,详细查找数据本身(冲突没有解决号的哈希存储)

优点:查找方便

缺点:有索引表的存在,要浪费空间

插入元素,删除元素之后,索引表要更新

4.哈希存储

哈希存储:根据关键字直接就能定位到记录本身,就能拿到数据

优点:查找方便,插入,删除也方便

缺点:如果哈希函数设计的不合理,查找的效率就会很低

数据

数据:现实生活中一切可以处理的信息

操作

创建,增,删,查,改,销毁

线性结构的顺序存储:

1.顺序表的特征:

(1).顺序并且连续存储

(2).大小固定

(3).表空不能取,表满不能存

(4).插入和删除不太方便需要移动元素,查找较方便

2.定义顺序表
1.定义数据元素的类型

#define N 20

#define M 12

typedef struct people   //定义一个通讯录的个人信息

{

     char name[N];        //姓名

     char phone1[M];      //手机号码

     char addr[N];         //地址

}data_type;

2.定义一个顺序表

#define SIZE 10

typedef struct list{

data_type arr[SIZE];  //满足(1)顺序并且连续存储,(2)大小固定

int       count;    //用它来保存顺序表有效数据的个数

count==0表空

count==SIZE 表满;

}List;

3.创建顺序表

开辟顺序表空间和开辟数据类型空间,大小为size。

4.插 入 元 素

分头插,中间插和尾插,尾插,把尾节点的下个地址指向新插入地点。中间插和头插,先找出位置在从后向前依次向后移。再插入对应位置。

5.显示顺序表

一一遍历显示

6.删除元素

和插入相同,找到位置,从前向后依次向前覆盖。尾删时直接释放最后的空间

带头结点的不循环单链表

认识链表

结点定义:

创建链表

 

插入结点

显示链表

给链表删除元素

受限的线性表

栈:受限在了操作上

只允许数据在一段进行插入和删除操作,允许操作的一段叫做栈顶 特点:先进后出(FILO)

 队列:受限在了操作上

只允许在一段执行插入操作,另一端执行删除操作,允许插入的一段叫做队尾,允许删除操作的一段叫做队头 特点:先进先出(FIFO)

 串:受限在了存储上

 只允许存储字符   *   '   a   —   1  

 栈:

栈的定义:

 

ypedef int data_type;

//顺序表的定义

typedef struct list

{
    data_type data[SIZE];    //存储空间

    int count; //指示元素的个数

}List;

//栈的定义

typedef struct stack

{
    data_type data[SIZE];    //存储空间

    //只能在栈顶进行操作

    int top; //指示栈顶

}Stack;

入栈和出栈

 

队列

队列的定义

 

//定义大小

#define SIZE (10)

//定义数据类型

typedef int data_type;

//栈的定义

typedef struct stack

{
    data_type data[SIZE];    //存储空间

    //只能在栈顶进行操作

    int top; //指示栈顶

}Stack;

//队列的定义

typedef struct queue

{
    data_type data[SIZE];    //存储空间

    //在队尾插入、队头删除

    int tail; //指示队尾

    int head; //指示队头

}Queue

队列入队出队:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值