赞
踩
作业习题笔记:
A 线性表采用顺序存储,必须占用一片连续的存储单元。
B 线性表采用顺序存储,便于进行插入和删除操作。
C 线性表采用链接存储,不必占用一片连续的存储单元。
D 线性表采用链接存储,便于插入和删除操作。
选B
A、C、D是正确的,是顺序存储结构和链式存储结构的特点.
顺序存储的根据数组指针直接定位,在顺序表的任何位置上插入一个数据元素,平均需要移动n/2个数据元素,算法效率为O(n)
A 表元素
B 字符
C 数据元素
D 数据项
E 信息项
选 C
数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。
一个数据元素可由若干个数据项组成,数据项是构成数据元素的不可分割的最小单位。例如,学生记录就是一个数据元素,它由学号、姓名、性别等数据项组成
引用牛客网中的解析: 线性表:0个或者多个数据元素的有限序列。
数据项:一个数据元素可以由多个数据项组成(例如人由头身体双手双脚颈部组成。)
A 顺序表
B 双链表
C 带头结点的双循环链表
D 单循环链表
选A
对于B、C、D,链表不能随意存取指定序号的元素。因此应使用顺序表来存取任一指定序号的元素,该操作的复杂度为O(n)。同时顺序表在最后进行插入和删除一个元素的复杂度只是是O(1)
A 单链表
B 仅有头指针的单循环链表
C 双链表
D 仅有尾指针的单循环链表
选D
对于A、B、C要想在尾端插入结点,需要遍历整个链表,复杂度为O(n)。
对于D,要插入结点,只要改变一下指针即可,要删除头结点,只要将指针移动到头结点即可。
A 插入、删除不需要移动元素
B 可随机访问任一元素
C 不必事先估计存储空间
D 所需空间与线性长度成正比
选B
链表不能随机访问任一元素,因为其存储空间不连续,需要通过链表指针去"寻找"
A 线性表在链式存储时,查找第 i 个元素的时间同 i 的值成正比
B 线性表在链式存储时,查找第 i 个元素的时间同 i 的值相关
C 线性表在顺序存储时,查找第 i 个元素的时间同 i 的值成正比
D 线性表在顺序存储时,查找第 i 个元素的时间同 i 的值无关
选C
线性表在顺序存储时,查找第 i 个元素的时间同 i 的值无关
A O(0)
B O(1)
C O(n)
D O(n^2)
选C
顺序存储的根据数组指针直接定位,在顺序表的任何位置上插入一个数据元素,平均需要移动n/2个数据元素,算法效率为O(n)
A
head==NULL;
Bhead->next==NULL;
Chead->next==head;
Dhead!=NULL;
选B
由于单链表是带头结点的单链表,头指针为 head,第一个结点为head ->next。 则判断该单链表表为空的条件是head ->next==NULL,选项ACD都错误。 所以正确答案为B。
A
p->llink->rlink = p->llink; p->llink->rlink =p->rlink; free(p);
B
free(p); p->llink->rlink =p->llink; p->llink->rlink =p->rlink;
C
p->llink->rlink =p->llink; free(p); p->llink->rlink = p->rlink;
D 以上 A,B,C 都不对。
选D
A
p->llink = q; q->rlink = p; p->llink->rlink = q;q->llink = p->llink;
Bq->llink = p->llink; p->llink->rlink = q; q->rlink = p;p->llink =q->rlink;
Cq->rlink = p; p->rlink = q;p->llink->rlink = q; q->rlink =p;
Dp->llink->rlink = q; q->rlink = p;q->llink = p->llink; p->llink =q;
选D
//实现顺序表就地逆置 //就地逆置顺序表 //写法一: void Reverse(SqList &L){ int temp; for(int i=0;i<L.length/2;i++){ temp = *(L.elem+i); *(L.elem+i)=*(L.elem+L.length-1-i); *(L.elem+L.length-1-i)=temp; // temp = L.elem[i]; // L.elem[i] = L.elem[L.length - 1 - i]; // L.elem[L.length - 1 - i] = temp; } } //写法二: //顺序表就地逆置 void Reverse2(SqList &L) { int *start_arry = L.elem;//指向首地址 int *end_arry = L.elem+L.length-1;//指向存放数据尾部位置 while (start_arry < end_arry) { int temp = *start_arry; *start_arry = *end_arry; *end_arry = temp; start_arry++; end_arry--; } }
//实现循环单项链表的就地逆置 //方法一: //循环单链表就地逆置() void Reverse(LinkList& L) { LinkList pre, curr, next; pre = L; curr = L->next; while (curr!=L) { next = curr->next; curr->next = pre; pre = curr; curr = next; } L->next = pre; // 之后将头节点 指向 原本的尾结点 } //方法二: //循环链表的就地倒置 void Reverse_Circular(LinkList &Link_Circular){ if ( Link_Circular->next == Link_Circular) { return; // 链表为空或只有一个节点,无需逆置 } LinkList p,q; int num=1; p = Link_Circular->next; /*p为原链表的当前处理节点*/ while(p != Link_Circular ){ /*当原链表未处理完*/ q = p->next; /*q指针保留原链表当前处理节点的下一个节点*/ if(num){ p->next = Link_Circular; /*将当前处理节点p插入到逆置L的表头*/ num--; //对第一个结点特殊处理 } else p->next = Link_Circular->next; Link_Circular->next = p; p = q; /*p指向下一个待插入的节点*/ } }
作业习题笔记:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。