数据结构课堂笔记diWord格式文档下载.docx

上传人:b****6 文档编号:20826985 上传时间:2023-01-25 格式:DOCX 页数:21 大小:115.59KB
下载 相关 举报
数据结构课堂笔记diWord格式文档下载.docx_第1页
第1页 / 共21页
数据结构课堂笔记diWord格式文档下载.docx_第2页
第2页 / 共21页
数据结构课堂笔记diWord格式文档下载.docx_第3页
第3页 / 共21页
数据结构课堂笔记diWord格式文档下载.docx_第4页
第4页 / 共21页
数据结构课堂笔记diWord格式文档下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数据结构课堂笔记diWord格式文档下载.docx

《数据结构课堂笔记diWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构课堂笔记diWord格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。

数据结构课堂笔记diWord格式文档下载.docx

变量名=条件表达式?

表达式T:

表达式F;

(4)选择语句有

条件语句1if(表达式)语句;

条件语句2if(表达式)语句;

else语句;

开关语句1switch(表达式){

case值1:

语句序列1;

break;

case值n:

语句序列n;

default:

语句序列n+1;

}

开关语句2switch(表达式){

case条件1:

case条件n:

(6)循环语句有:

for语句for(赋初值表达式序列;

条件;

修改表达式序列)语句;

while语句while(条件)语句;

do-while语句do{

语句序列;

}while(条件);

(7)结束语句有

函数结束语句return表达式;

return;

case结束语句break;

异常结束语句exit(异常代码);

(8)输入和输出语句有:

输入语句scanf([格式串],变量1,…,变量n);

输出语句printf([格式串],表达式1,…,表达式n);

通常省略格式串。

(9)注释

单行注释//文字序列

(10)基本函数有:

求最大值max(表达式1,…,表达式n)

求最小值min(表达式1,…,表达式n)

求绝对值abs(表达式)

求不足整数值floor(表达式)

求进位整数值ceil(表达式)

判定文件结束eof(文件变量)或eof

判定行结束eoln(文件变量)或eoln

(11)逻辑运算约定

与运算&

&

对于A&

B,当A的值为0时,不再对B求值。

或运算||:

对于A||B,当A的值为非0时,不再对B求值。

算法:

是对特定问题求解步骤的一种描述,它是指令的有限序列。

(1)有穷性

(2)确定性(3)可行性(4)输入(5)输出

算法设计要求:

(1)正确性

(2)可读性(3)健壮性(4)效率与低存储量需求

线性表:

是最常用且最简单的一种数据结构。

一、线性表:

除表中的第一个元素外,其余元素仅有一个前驱。

除表中最后一个元素外,其余元素仅有一个后继。

二、线性表的存贮结构

1.解决存贮问题

2.反映元素之间关系

三、线性表的操作:

1.插入一个元素

2.删除一个元素

3.查找一个元素

4.排序

……

怎么删除ai?

覆盖算不算删除?

答:

不算。

删除正是为了得到。

SeqlistDelete(A[],n,i)

{

if(i<

1ORi>

n)

Printf(“参数非法”);

}return0;

Else

for(k=i+1;

k<

n;

k++)

A[k-1]<

=A[k];

n<

=n-1;

returnn;

栈(heap)

五、堆栈(stack):

是一种特殊形式(表的插入和删除)的线性表

限定在表的。

运行

作业1:

线性表中元素为整型,以50为界,小于50在左,大于50在右。

作业讲解:

x<

=A[i];

while(A[j]>

=xandi<

j)

{

j<

=j-1;

if(A[j]<

x)

A[i]<

=A[j];

i<

=i+1;

while(A[i]<

xandx<

j)

i<

if(A[i]>

=x)

A[j]<

j<

第三章:

链式存贮结构的线性表

一、为什么要引入链表?

顺序表的优点:

结构紧凑,存储空间利用率高,操作简单。

缺点:

它需要一块连续的存贮空间。

多任务多生产

则找不出谁是前驱谁是后继

插入a1:

*p=a1;

改为:

p->

date=a1;

指针p指向对象date=a1,该对象是一个结构体,指向结构体里a1那部分

删除a1并把存储空间解放:

free(p);

动态存储结构

地址=malloc(大小);

字节

区别:

数组:

编译时确定(静态)

链表:

编译时确定(动态)<

原本不存在>

P=(ElemType*)=malloc(sizeof(ElemType));

改为NODE*改为NODE

因为是无类型指针,所以必须强制转换。

Typedef类型定义structnodeNODE(定义为新的类型)

二、链表的构造

q<

=NULL;

for(j=n;

i>

=1;

i--)

p<

=(NODE*)malloc(sizeof(NODE));

date<

=an;

将an替换为ai注:

i此处为n-1

next<

把指针设为空指针,替换为q

=p;

考虑链表的头指针

当ai未插入时:

CreatLinkList(n)构造链表,n为节点

for(i=n;

scanf(ai);

=ai;

=q;

return(p);

注:

此时p、q一样∵已被赋值给对方

作业4:

倒过来。

从前节点到后节点。

头指针headp<

=head;

从头指针出发,依次输出节点。

可用for循环或while循环(不确定循环次数时用)

while(p=\NULL)

printf(p->

data);

=p->

next;

三、链表的插入算法:

假定:

在表中值为x的节点前面插入一个值为y的节点。

分析:

1.空链

2.表中第1个节点的值为x

3.表中有一个值为x的节点

4.表中没有值为x的节点

5.表中有多个值为x的节点。

NODE*InsertLinkList(head,x,y)

q->

data<

=y;

if(head=NULL)

head<

elseif(head->

date=x)

}

else

r<

=head->

while(p->

data=/xandp=\NULL)

if(p=\NULL)

r->

return(head);

删除表中值为x的节点

1.空表;

2.第1个节点的值为x;

3.在表中有值为x的节点;

4.在表中没有值为x的节点

NODE*=DeleteLinkList(head,x,t)(返回指针)a.值参callbyvalue

{b.变参callbyaddress

s<

if(head=NULL)

printf("

这是一个空表"

elseif(head->

data=x)

{

s<

head<

}

else

q<

(返回内容不同)

p<

while(p->

data=\xandp->

next=\NULL)

q<

p<

if(p->

q->

表中没有值为x的节点"

);

if(s=\NULL)

t<

=s->

data;

free(s);

return(head);

(返回值)

四、链式存贮结构的栈

五、链式存贮结构的队列

六、循环链表

L=(a1,a2,…an)ai——存在元素

双向链表

插入:

值为x的节点前面加入值为y的节点

 

删除值为x的节点:

一个指针指向一个整体,指向同个整体的必须是相同的指针,不管是P还是m。

八、十字链表

NODE*PoliAdd(ah,bh)

Pa<

=ah;

Pb<

=bh;

已知头指针分别为ah和bh的两条链。

PC<

ST<

=PC;

while(Pa<

=\NULLandPb<

=\NULL)

ct<

=Compare(Pa->

exp,Pb->

exp);

假定有compare比较

switch(ct)

case"

>

"

:

attach(PC,Pa->

coof,Pa->

Pa<

=Pa->

break;

="

m<

coof+Pb->

coof

attach(PC,m,Pa->

Pb<

<

attach(PC,Pb->

coof,pb->

=Pb->

}

while循环可能出现一条链结束了一条链还未结束∴还剩下一节结点,但可能同时结束

while(Pa=\NULL)

attach(PC,Pa->

while(Pb=\NULL)

attach(PC,Pb->

coof,Pb->

Pb<

该部分算法将剩余部分未加的链挂上去但PC走动,ST仍指向空结点

=ST->

free(ST);

如图:

a.比较指数的大小

b.比较完后考虑是否相加,还是挂在一条链上

从前往后产生链。

产生一个结点往上挂。

例题:

一元多项式相加,

前提:

不破坏原本两条链,相加求第三条链

数据结构

必须考虑抵消指数的情况m=\0.

用项对应结点

Compare(a,b)

if(a>

b)

if(a>

return('

'

);

elseif(a=b)

='

else

voidattach(PC,coof,exp)

栈:

是限定仅在表尾进行插入或删除操作的线性表

表尾(栈顶)表头(栈底)

压栈算法:

intPushStack(s[],top,x)

if(top>

=SMAX)

overlow"

return0;

S[top]<

=x;

top=top++;

出栈算法:

ElemTypePopstack(s[],top,bottom)

if(top<

=bottom)

top<

=top-1;

y<

=S[top];

returny;

作业2:

为了节省空间,两个栈共享一段内存,写出这两个栈的压栈及出栈算法。

队列:

1.什么是队列?

也是一种特殊的线性表(插入在表的一端,删除在表的另一端)

区别于线性表:

插入、删除在同一端。

2.队列的操作:

1.插入。

如何判断其满?

intQueueInsert(Q[],front,rear,x)

if(rear>

=QMAX)

Overlow"

rear=rear+1;

Q[rear]<

return1;

2.删除:

ElemTypeQueueDelete(Q[],front,rear)

if(rear<

=front)

front=front+1;

以上为错误算法,rear<

QMAX才能插入,空队列:

rear=front指针重叠“假满”∵删除/插入一次无事,N次则无用了。

插入满了只能删除,rear、front均在尾,插入为满,删除为空∴成为了无用队列。

rear=100

rear+1=\101

=1

mol->

%求余

(100+1)%=1->

即令100+1=1

正确的队列插入与删除算法如下:

if((rear+1)modQMAX=front)

modQMAX

3.队列的应用keyboardbuffer32byte

如何解决“假满”?

---------还有空的地方却不能再插入。

接为环状(上弯下弯不同)

元素本身是字符型。

1Byte=指针4Byte

总结:

优点:

1.不要求连续的、大块的内存,充分地利用内存空间

2.动态的存储结构

不足:

1.空间复杂度增加

2.操作(算法)复杂些

给定一个链表,将其倒过来。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 图表模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1