没有合适的资源?快使用搜索试试~ 我知道了~
首页数据结构复习要点:逻辑与物理结构、算法分析详解
数据结构复习要点:逻辑与物理结构、算法分析详解
0 下载量 131 浏览量
更新于2024-06-28
收藏 800KB DOC 举报
《数据结构》复习重点文档详细介绍了数据结构的基本概念、术语和算法分析的关键要素,对于理解和掌握该领域的核心内容至关重要。以下是章节概述: 1. 数据结构基础 - 数据结构定义:关注的是数据对象如何组织和存储,以支持高效的操作。数据结构包括数据元素(如数据项和数据结点)以及它们之间的关系。 - 数据逻辑结构分类:线性结构(如数组、栈、队列等)和非线性结构(如树、图等),通过序偶的概念描述元素之间的前后关系。 - 物理结构(存储结构):分为顺序存储结构(元素按顺序排列,如数组)和链式存储结构(元素通过指针连接,动态分配空间)。 2. 算法与复杂度分析 - 算法定义:一个解决问题的明确步骤序列,具有有穷性、确定性、可行性(可实现)和输入性(对输入数据的处理)等特性。 - 时间复杂度:衡量算法执行效率的重要指标,反映了算法运行时间与问题规模之间的关系。理解估算算法时间复杂度的方法对于优化性能至关重要。 3. 数据类型与操作 - 数据类型不仅包含值的集合,还包括一组操作,规定了变量或表达式的可能取值范围以及可执行的操作。这对于编程实践至关重要。 4. 逻辑结构与物理结构的关系 - 逻辑结构决定了算法的设计,比如选择什么样的数据结构来组织数据;而物理结构则是算法实现时的具体表示方式,两者密切相关但又可以独立考虑。 通过这份复习资料,学习者能够系统地复习数据结构的核心概念,理解算法设计的基本原则,并学会分析算法的效率,为后续深入学习和实际编程项目打下坚实的基础。复习时,注意理解数据结构的实例和练习,通过实践加深记忆和应用能力。
资源详情
资源推荐
15
B.s->next=p; s->prior=p->prior; p->prior=s; p->prior->next=s;
C.p->prior=s; s->next=p; p->prior->next=s; s->prior=p->prior;
D.s->prior=p; s->next=p->next; p->next->prior=s; p->next=s;
9. 删除双链表中 p 所指结点的操作是( C )。
A.p->prior=p->prior->prior; p->prior->next=p; free(p);
B.p->next=p->next->next; p->next->prior=p; free(p);
C.p->prior->next=p->next; p->next->prior=p->prior; free(p);
D.p->next->prior=p->prior; p->prior->next=p; free(p)
三、编程
1.含 n 个元素的顺序表 X 按升序排列,删除线性表中值介于 a 与 b 之间的元素。
void del(int x[],int *n,int a,int b)
{ int i=0,k;
while(i<*n)
if(x[i]>a&&x[i]<b)
{ for(k=i;k<*n;k++)
x[k]=x[k+1];
(*n)--;}
else i++;}
2.含 n 个元素的顺序表 A 按升序排列,删除线性表中多余的值相同的元素。
int del(int a[],int n)
{ int i=0,j;
while(i<=n-1)
if(a[i]!=a[i+1])i++;
else
{ for(j=i;j<n;j++)
a[j]=a[j+1];
n--;}
return n;}
3.含 n 个元素的顺序表 A 中元素按升序排列,插入一个元素 x 后,使 A 中元素
16
仍有序。
int insert(int a[],int n,int x)
{ int i,j;
if(x>=a[n-1])a[n]=x;
else{ i=0;
while(x>=a[i]i++;
for(j=n-1;j>=i;j--)
a[j+1]=a[j];
a[i]=x;
n++;}
return n;}
4.求单链表的长度
int count(NODE *h)
{int n=0;
NODE *p;
p=h;
if(h==NULL)n=0;
else
while(p!=NULL)
{n++; p=p->next;}
return n;}
第三章 栈和队列
要求、目标:
熟悉栈和队列特点、数据结构的定义
掌握在栈上的各种操作、使用数组和链表实现栈
掌握用数组和链表实现队列
掌握循环队列的相关操作
一、栈
17
(一)概述
1.堆栈:只允许在表的一端进行插入和删除操作的线性表。
2.栈顶:允许进行添加或删除元素的一端
3.栈底:不允许进行添加或删除元素的一端
4.空栈:没有元素的栈
5.入栈(进栈/压栈)(push):栈的插入运算
6.出栈(退栈/弹出)(pop):栈的删除运算
7.栈的特点:后进先出(LIFO)
在栈中插入和删除的示例
(二)栈的顺序存储结构
1.栈类型的定义
#define STACKMAX 100
int top;
int stack[STACKMAX];
2.栈的初始化
top 值为下一个进栈元素在数组中的下标值,入栈操作是先压栈再移动栈顶
指针,出栈操作是先移动栈顶指针再取出元素
1)栈空:top==0
2)栈满:top==STACKMAX
3.进栈与出栈顺序
若进栈序列为 a、b、c,则全部可能出栈的序列为(’→’表示进,’←’表示出):
①a→ a← b→ b← c→ c← 即 abc
18
②a→ b→ b← c→ c← a← 即 bca
③a→ a← b→ c→ c← b← 即 acb
④a→ b→ b← a← c→ c← 即 bac
⑤a→ b→ c→ c← b← a← 即 cba
4.判定栈是否为空
int empty()
{if(top==0) return 1;
else return 0;}
5.压栈的实现
int top=0;
int push(int x)
{if(top>=STACKMAX) rerurn 1;
stack[top++]=x;
return 0;}
6.出栈的实现
int pop(int *p)
{if(top==0) rreturn 1;
*p=stack[--top];
return 0;}
7.读栈顶元素
void readtop(int *p)
{if(top==0) printf(“No element\n”);
else *p=stack[--top];
top++;}
(三)栈的链式存储结构
1.链栈:用线性链表表示的栈
2.栈顶指针:链栈的表头指针
3.栈的变化
1)栈空:top==NULL
剩余86页未读,继续阅读
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功