C语言数据结构期末复习版(持续更新中......)

本文是C语言数据结构的复习资料,重点涵盖了顺序表、单链表、栈、队列以及树与二叉树的基础知识。通过选择题和编程题的形式,解析了顺序表的插入、删除函数,链表的查询、插入和删除操作,栈和队列的基本运算,以及树形结构的相关概念。特别强调了顺序表和链表操作的时间复杂度以及二叉树的遍历方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

失踪人口回归啦~ 我作为一名普通的大学生,坐牢数天,只为期末。两天速成的大物取得了7*分的好(不挂)成绩.jpg 上午刚考完的高数大概也不会挂,前两天考了通英和英语六级。就是说坐牢结束了,但没完全结束。==【数据结构与算法】==还得考,挑重点的来,那就浅浅复习一下吧~
PS:鉴于时间原因,主要是通过例题来复习。

顺序表与单链表

1.选择题

(1)对于顺序表,以下说法错误的是( A)
A.顺序表是用一维数组实现的线性表,数组的下标可以看成是元素的绝对地址​
B.顺序表的所有存储结点按相应数据元素间的逻辑关系决定的次序依次排列
C.顺序表的特点是:逻辑结构中相邻的结点在存储结构中仍相邻
D.顺序表的特点是:逻辑上相邻的元素,存储在物理位置也相邻的单元中
在C语言中,数组的下标是从0开始的,但位置序号是从1开始的,所以要注意区分元素的位置序号和该元素在数组中的下标位置的对应关系。另外,对于线性表,假设每个元素占用l个存储单元,并以所占的第一个单元的存储地址作为数据元素的起始位置,则线性表中第i个数据元素ai的存储位置为:LOC(ai) = LOC (a1)+(i-1)*l
—————————————————————————————————
(2)以下说法错误的是 ( C)。
A.对于线性表来说,定位运算LocateElem在顺序表和单链表上的时间复杂度均为O(n)
B.插入、删除操作在顺序表上的实现,平均时间复杂度为O(n)
C.在链表上实现读表元运算的平均时间复杂度为O(1)
D.插入、删除操作在链表上的实现可在O(1)时间内完成
对于A,定位运算需要遍历对比元素,故对;对于B,顺序表的插入和删除操作需要将按位移动元素,也对;对于C,链表中读元操作需要遍历元素,平均时间复杂度不是O(1),而在顺序表中,因为可以通过下标直接访问元素,所以时间复杂度为常数时间;对于D选项,在链表的头部插入和尾部删除的实现操作是常数时间,故正确。
————————————————————————————————
(3)顺序存储表示中数据元素之间的逻辑关系是由( C)表示的。
A.指针
B.逻辑顺序
C.存储位置
D.问题上下文
顺序存储的存储位置与逻辑结构中的逻辑前后顺序是对应的。
————————————————————————————————
(4)设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( D)最节省时间。
A.单链表
B.单循环链表
C.带尾指针的单循环链表
D.带头结点的双循环链表
因为在末尾插入或者结点需要找到尾结点以及尾结点的前一个结点,因此采用单链表操作的时间复杂度为O(n),用带尾指针的单循环链表删除尾结点是常数时间,但插入节点仍然是O(n)。用带头结点的双循环链表最节省时间。

2.函数&&编程题

(1)顺序表的插入函数
int ListInsert(SqList &L,int i,ElemType e){
   
    //插入位置不合法
    if(i<=0||(i>L.length+1)){
   
        return 0;
    }
    //表满
    if(L.length>=MAXSIZE){
   
        return 0;
    }
    int j;
    //插入位置后的元素后移一位
    for(j=L.length-1;j>=i-1;j--){
   
        L.elem[j+1]=L.elem[j];
    }
    L.elem[i-1]=e;
    //表长加一
    L.length ++;
    return 1;
}

—————————————————————————————————

(2)顺序表的删除函数
int ListDelete(SqList &L,int i){
   
    //删除位置不合法
    if((i<1)||(i>L.length)){
   
        return 0;
    }
    //元素前移
    for(int j=i;j<=L.length-1;j++){
   
        L.elem[j-1]=L.elem[j];
    }
    //表长减1
    L.length --;
    return 1;
}

————————————————————————————————

(3)单链表的查询插入删除
int  Get_LinkList(LinkList H, ElemType key){
   
    int i = 0;
    while(H->data!=key){
   
        H=H->next
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值