数据结构题型复习

时间复杂度分析

试分析下面各程序段的时间复杂度。

for (i=0; i<n; i++)

for (j=0; j<m; j++)

a[i][j]=0;

  • A. O(1)
  • B. O(n)
  • C.O(n2)
  • D.O(m*n)

  • 答案选D 从0-n 再从0-m 所有O(m*n)

  • 试分析下面各程序段的时间复杂度。

    i=1;
  •  while(i<=n)
  •  i=i*3;
  • A.  O(1)
  • B.  0(n)
  • C.  O(n2)
  • D.O(log3n)
  • 答案选D,令循环次数为x,则循环x次后i=3^x,当3^x大于n,即x>log3n时候跳出循环

经典题型:

分析下面各程序段的时间复杂度计算机保研,计算机考研国家线,计算机考研需要考哪些科目,计算机考研院校推荐,计算机考研学校排名,计算机考研科目,计算机考研,计算机考研大纲,计算机专业考研,计算机考研专业课,计算机408考研科目,计算机考研机试,软件工程考研,考研真题https://noobdream.com/Practice/article/155/算法分析的两个主要方面是(时间复杂度 空间复杂度)

线性表

设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用(    D      )最节省时间。

  • A. 单链表
  • B. 单循环链表
  • C. 带尾指针的单循环链表
  • D. 带头指针的双循环链表

答案选D,

带尾指针的单向链表:插入可以,但是删除无法完成,因为p需要前移,但是单向链表无法得到前一个节点。(因为尾指针需要指向最后一个,你把最后一个删除之后,尾指针需要指向倒数第二个,这个时候找不到倒数第二个,所以删除不行)

带尾指针的双向链表:插入和删除都很简单。

带尾指针的单向循环链表:插入很简单,删除则需要遍历整个链表,比较费时。

带头指针的双向循环链表:插入和删除都很简单。

重点在于避免遍历整个链表

在一个具有n 个结点的有序单链表中插入一个新结点并仍然保持有序的时间复杂度是_O(n)__。

有序指在单链表中指定位置插入指定元素的时间复杂度,长度为n单链表中找到指定位置时间复杂度为O(n),插入元素时间复杂度O(1),加起来是O(n)

若带头结点的单链表的头指针为head,则该链表为空的判定条件是(  head->next==NULL )

单链表head为空的判断条件_weixin_30252709的博客-CSDN博客1、带头结点单链表:head->next==NULL2、带头结点循环链表:head->next==head3、不带头结点单链表:head==NULL转载于:https://www.cnblogs.com/claudia529/p/11072341.html...https://blog.csdn.net/weixin_30252709/article/details/98828993

在一个长度为n的顺序表中删除第i个元素,要移动___n-i____个元素。

如果要在第i个元素前插入一个元素,要后移___n-i+1______个元素。

在一个长度为n的顺序表中删除第i个元素,要移动________阿里巴巴笔试题_牛客网在一个长度为n的顺序表中删除第i个元素,要移动_______https://www.nowcoder.com/questionTerminal/e63660d519e24ecda58bc97fef7e35eb

一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是(  108 )

公式=首元素存储空间+(第n个元素-第1个元素)*长度

 100+(5-1)*2=108

在一个单链表中,若删除p所指向结点的后续结点,则执行(p->next=p->next->next )。

或者 :q = p->next; // q记录欲删除的结点
p = p->next->next; // 跨过欲删除的结点,也可写作 p->next = q->next
free(q); // 释放该结点占用的空间

逻辑顺序,先解决q前或后结点 与q的链接关系,再进行p与q的链接,避免断链出现。

在双向循环链表中,在p指针所指的结点后插入一个指针q所指向的新结点,修改指针的操作是( q->prior=p;q->next=p->next;p->next->prior=q;p->next=q;    )。

在双向循环链表中,在p指针所指的结点前插入一个指针q所指向的新结点,修改指针的操作是(p->prior->next=q;q->prior=p->prior;p->prior=q;q->next=p;  )。



栈和队列

在一个栈顶指针为 HS 的链栈中,将一个S指针所指的结点入栈, 应执行下列 ( C  )命令。

  • A. HS->next=S
  • B. S->next=HS->next, HS->next=S
  • C. S->next=HS,HS=S
  • D. S->next=HS, HS=HS->next
  • 答案选C,题目问的是压栈。s插入后成为栈顶,s的next就是原来的HS,栈顶指针重新复制为s。

队列和栈的区别

数据结构-队列和栈有什么区别_Roger_CoderLife的博客-CSDN博客_数据结构队列和栈的区别一、队列与栈的定义:队列(Queue):是限定只能在表的一端进行插入和在另一端进行删除操作的线性表;栈(Stack):是限定只能在表的一端进行插入和删除操作的线性表。 二、队列与栈的区队列和栈是两种不同的数据结构。它们有以下区别:(1)操作的名称不同。队列的插入称为入队,队列的删除称为出队。栈的插入称为进栈,栈的删除称为出栈。(...https://blog.csdn.net/Roger_CoderLife/article/details/83183215

循环队列具体讲解:

循环队列的入队出队-----数据结构与算法笔记_王先生的蒋小姐的博客-CSDN博客_循环队列入队出队一、循环队列参考书:《数据结构(C语言)》–严蔚敏等编著,清华大学出版社。https://blog.csdn.net/weixin_44847002/article/details/121881554Q.rear尾指针始终指向下一个队尾入队的位置,并非指向一个元素

循环队列题目实战:

【队列】队头指针队尾指针指向类题目总结_深海里的鱼(・ω<)★的博客-CSDN博客_循环队列删除元素队尾指针怎样变化引入众说周知,在队列的题目中,队头指针(front)和队尾指针(rear)有两种指示方法。(1)队头指针①指向队头元素②指向队头元素元素的前一个位置(2)队尾指针①指向队尾元素②指向队尾元素的后一个位置指示方法不同元素入队和出队操作也不同,但是在做大部分题目的时候,我们并不需要分析队头指针和队尾指针具体操作,我们只要记住下面两个结论就行结论结论一:当队列执行元素入队操作时,队尾指针(rear)向后移,队头指针(front)不变结论二:当队列执行元素出队操作时,队头指针(front)向后https://blog.csdn.net/qq_50710984/article/details/113923385

判断一个

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值