数据结构与算法笔记(1)

开发工具与关键技术:VS
作者:LJR
撰写时间:2020年 05 月 06 日

1.1:程序=算法+数据结构
1.2:数据结构:(1)逻辑结构
(1)线性结构:结构中的数据元素之间存在着一对一的线性关系。
(除第一个和最后一个数据元素外,每个数据元素只有一个前驱和一个后续数据元素。)
(2)树结构:结构中的数据元素之间存在着一对多的层次关系。
(除根节点外,每个元素只有一个前驱数据元素,可有0个或若干个后续数据元素。)
(3)图结构:结构中的元素之间存在着多对多的任意关系。
(每个数据元素可有0个或若干个前驱数据元素和0个或若干个后续数据元素。)
1.3:算法的概念和特性
算法是对特定问题求解步骤的一种描述,它是指令的有限序列。
五个特性(有穷性、确定性、可行性、输入、输出)
设计要求(正确性、可读性、健壮性、效率与地存储量需求)
算法分析(
(1)算法效率的质量(1.算法本身选用的策略、2.书写程序的语言、3.编译产生的代码质量、4.机器执行指令的速度、5.问题的规模)
(2)算法的时间复杂度(1.常量阶时间复杂度、2.线性阶时间复杂度、3.平方阶时间复杂度)
(3)算法的空间复杂度


2.1:线性表
特征:
1.在非空的线性表,有且仅有一个开始结点a1,它内有直接前趋,而仅有一个直接后继a2.
2.有且仅有一个终端结点an,它没有直接后继,而仅有一个直接前趋an-1;
3.其余的内部结点ai(2≦i≧n-1)都有且仅有一个直接前趋ai-1和一个直接后继ai+1。

线性表的基本运算:
(1) 求表长——求线性表中元素个数。
(2) 遍历——从左到右(或从右到左)扫描(或读取)表中元素。
(3) 按编号查找——找出表中第i个元素
(4) 按特征查找——按某个特定值查找线性表
(5) 插入——在第i个位置上(即原第i个元素前)插入一个新元素
(6) 删除——删除原表中的第i个元素
(7) 排序——按元素某特征值的递增(或递减)排序,重排表中各元素

2.3:单链表的结构:
单链表中构成链表的结点只有一个指向直接后继结点的指针域。
其结构特点:逻辑上相邻的数据元素在物理上不一定相邻。
3.1:栈的定义
堆栈简称为栈,是限定只能在表的一端进行插入和删除操作的线性表。

栈的基本运算
(1) StackInit()初始化堆栈
(2) StackEmpty(S)判定栈是否为空
(3) StackLength(s)求堆栈s的长度
(4) GetTop(S)获取栈顶元素的值
(5) Push(s,e)将元素e进栈
(6) Pop(S),出栈(删除栈顶元素)

栈的存储结构:(

  1. 顺序栈——采用顺序结构存储
  2. 链栈——采用链式结构存储

    3.2:队列的定义:
    队列简称为队,是限定只能在表烦人一端作插入运算,在另一端做作删除运算的线性表。
    栈的存储结构:(
    顺序队列——采用顺序结构存储
    链式队列——采用链式结构存储

3.2.顺序队列的基本运算-1
(1)初始化队列InitQueue()
CirQueue InitQueue(){
CirQueue q;
q.front=q.rear=0;
return(q);
}

(2)判定队列去是否为空QueueEmpty(q)
int QueueEmpty(CirQueue q)
{
Return(q.font==q.rear);
}

(5)AddQueue(q,e)将元素e入队
Viod AddQueue(CirQueue*q,ElementType e)
{
if(q->front==(q->rear+1)%MaxSize)
printf(“\nfull”);
else
{
q->rear=(q->rear+1)%MaxSize;
q->elem[q->rear]=e;
}
}
4.1:串的定义
串是字符串的简称。在数据结构中,串是一种在数据元素的组成上具有一定约束条件的线性表,即要求组成线性表的所有数据元素都是字符,所以说串是一个有穷的字符序列。
串是由零个或多个字符组成的有限序列,记作s=”s0s1…sn-1”(n≥0),其中s是串名,字符个数n称作串的长度,双撇号括起来的字符序列”s0s1…sn-1”是串的值。每个字符可以是字母、数字或任何其它的符号。零个字符的串(即:””)称为空串,空串不包含任何字符。
(1)长度为1的空格串" “不等同于空串”";
(2)值为单个字符的字符串不等同于单个字符,如"a"与′a′;
(3)串值不包含双撇号,双撇号是串的定界符。
串中任意个连续的字符组成的子序列称为该串的子串。包含子串的串则称为主串。通常将字符在串中的序号称为该字符在串中的位置。子串在主串钟的位置则以该子串在主串中的第一个字符位置来表示。
4.1.2 串的基本算法
(1)Assign(s,t),将t的值赋给s。
(2)Assign(s4,s3)或Assign(s4,“student”)后,s4="student"。
(3)Length(s),求s的长度。
(4)Length(s1)=14,Length(s3)=7。
(5)Equal(s,t),判断s与t是否相等。
(6)Equal(s2,s3)=false,Equal(“student”,s3)=true。
(7)Concat(s,t),将t连接到s的末尾。如:Concat(s3, " number")= “student number”。
(8)Substr(s,i,len),求子串。如:Substr(s1,7,7)= “student”,Substr(s1,10,0)= “”, Substr(s1,0,14)= “I am a student”。
(9)Insert(s,i,t),在s的第i个位置之前插入串t。 Insert(s3,0,“good_”)后,s3="good_student"。
(10)Delete(s,i,len),删除子串。ss=“good_student”,Delete (ss,0,5)后,ss="student"。
(11)Replace(s,u,v),子串替换,即将s中的子串u替换为串v。 Replace(s1,s3,s2)后,s1=“I am a teacher”,Replace(s1,“worker”,s2)后s1的值不变。 若ss=“abcbcbc”,则:Replace(ss,“cbc”,“x”)后,ss="abxbc",Replace(ss,“cb”,“z”)后,ss="abzzc"。
(12)index(s,t),子串定位,即求子串t在主串s中的位置。 index(s1,s3)=7,index(s1,s2)=-1,index(s1, “I”)=0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值