数据结构补习

本文介绍了学习C语言的目的,重点阐述了数据结构中数据的逻辑结构(如线性关系、树形和图状结构),以及各种存储结构(顺序、链表、索引和散列)。还涉及了链表操作、二叉树特性和赫夫曼树的应用,强调了算法和数据结构在程序设计中的重要性。
摘要由CSDN通过智能技术生成

学习C语言是学会为了如何写程序,学习数据结构是为了如何简洁高效的写程序

学习C语言是学会为了如何写程序,学习数据结构是为了如何简洁高效的写程序

1.数据 数据不再单纯是数值,而更多的是一个集合,(结构体),(一行数据元素)

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

1.1对1(线性关系):(线性表)

1对多(树形关系):树,1对二(二叉树)

3.多对多(图状关系):图

3.存储结构: 1.顺序存储:顺序表 2.链式存储:链表 3.索引存储 4.散列存储:Hash表 4.操作 创建,插入,修改,删除,查询,销毁

3.线性关系(1对1) 1.顺序存储:顺序表 1.特点: .顺序并连续存储 int arr[N]; .表满不能存,表空不能取。 .查找比较方便,但插入和删除需要移动元素

//函数的声明
//创建顺序表:堆区分配空间
//参数:void
//返回值:顺序表的首地址:SeqTable *
SeqTable * createSeq(void);
#include "../include/seq.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//创建顺序表
SeqTable * createSeq(void)
{
SeqTable * pSeq=NULL;
pSeq=(SeqTable *) malloc(sizeof(SeqTable)); //在堆区动态分配了一个空间
if(NULL==pSeq)
{
perror("malloc error");
return NULL;
}
//清空
memset(pSeq,'\0',sizeof(SeqTable)); //bzero(pSeq,sizeof(SeqTable));
return pSeq;
}

3.链表的相关操作 1.定空链表:只有头结点的链表称为叫空链表 3.创建空链表:只有头结点的链表义数据元素

4.插入链表 (根据位置进行插入) 1.头插法

//根据位置插入链表
//参数1:头结点的首地址
//参数2:你要插入的位置
//参数3:插入的数据
//返回值:成功返回OK,失败返回失败原因
int insertlist(Node * pHead,int pos,datatype item)
{
//1.入参判断
//1-1.链表是否存在
if(NULL==pHead)
{
return LISTNOEXIST;
}
//2.创建新结点
Node * pNew=(Node *)malloc(sizeof(Node));
if(NULL==pNew)
{
perror("mallocerrr");
return MALERROR;
}
memset(pNew,'\0',sizeof(Node));
pNew->data=item; //将插入的值放入到pNew中
//3.链表插入:头插法,尾插法,中间插入
switch(pos)
{
case TAIL: //尾部插入
break;
case HEAD:
//头部插入
//(1).保护好头结点后的所有结点
pNew->pNext=pHead->pNext;
//(2).新结点插入进去
pHead->pNext=pNew;
break;
default:
printf("中间插入\n");
}
return OK;
}

5.双向链表

1.定义数据元素

2.定义结点类型

typedef int datatype;

typedef struct dbnode

{ struct dbnode *pPre;

datatype data;

struct dbnode *pNext;

}DbNode;

 1.线性关系(线性表)----两个特殊的表

1.栈 1.栈特点 .先进后出 .只允许在栈顶插入和删除 2.栈的存储方式 1.栈的顺序存储 ---顺序栈

2.队列 1.队列特点 .先进先出 .允许在队头删除,在队尾插入 2.存储方式 1.队列的顺序存储---顺序队列(循环队列

树(Tree)是n(n≥0)个节点的有限集合T,它满足两个条件 : .有且仅有一个特定的称为根(Root)的节点; .其余的节点可以分为m(m≥0)个互不相交的有限集合T1、T2、……、Tm,其中每一个集合又是一 棵树,并称为其根的子树(Subtree)

1.度数 一个节点的子树的个数称为该节点的度数,一棵树的度数是指该树中节点的最大度数。

2.深度 节点的层数等于父节点的层数加一,根节点的层数定义为一。树中节点层数的最大值称为该树的高度或 深度。

3.边数 一个节点系列k1,k2, ……,ki,ki+1, ……,kj,并满足ki是ki+1的父节点,就称为一条从k1到kj的路径,路径的长 度为j-1,即路径中的边数

1.什么是二叉树 二叉树(**Binary Tree)**是n(n≥0)个节点的有限集合,它或者是空集(n=0),或者是由一个根 节点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成 .二叉树的度数最大2(最多有两个子结点) .严格区分左子树和右子树 2.二叉树的性质 .二叉树第i(i>=1)层上的结点最多2^(i-1)个 .深度为k(k>=1)的二叉树最多有2^k-1个结点

.在任意一棵二叉树,树叶的数目比度数为2的结点的数目多1

3.满二叉树 深度为k(k≥1)时有2^(k-1)个节点的二叉树。

7.赫夫曼树 赫夫曼(Huffman)树,又称最优树,是带权路径长度最短的树,有着广泛的应用 进一步推广,考虑带权的结点。结点的带权路径长度指的是从树根到该结点的路径长度和结点上权的乘 积。树的带权路径长度是指所有叶子节点的带权路径长度之和,记作 WPL 。WPL最小的二叉树就是最优 二叉树,又称为赫夫曼树

1.程序=算法+数据结构 1.算法: 算法是一个有穷规则(或语句、指令)的有序集合 算法:解决问题的方法步骤 2.程序 用计算机语言对算法的具体实现。 3.数据结构:研究的是数据的逻辑结构,存储结构及其操作 算法的设计:取决于你选的逻辑结构 (1对1(线性关系),1对多(树形关系),多对多(图状关系)) 算法的实现:依赖于你选的存储结构 (顺序存储,链式存储) 2.算法的特性 .有穷性 —— 算法执行的步骤(或规则)是有限的 .确定性 —— 每个计算步骤无二义性; .可行性 —— 每个计算步骤能够在有限的时间内完成 .输入 —— 算法有一个或多个外部输入; .输出 —— 算法有一个或多个输出。 3.评判一个算法的好坏 .消耗时间的多少 (时间复杂度) .消耗存储空间的多少 (空间复杂度) .容易理解、容易编程和调试、容易维护 4.计算时间复杂度:算法消耗时间,它是问题规模的函数 T(n) 时间复杂度:算法中基本操作重复执行的次数是问题规模n的某个函数f(n),

1.确定hash函数 .直接地址法 .平方取中法 .叠加法 .保留除数法 又称质数除余法,设Hash表空间长度为m,选取一个不大于m的最大质数p

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值