数据结构练习 第二章 线性表资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构练习第二章线性表
一、选择题
1. 下面关于线性表的叙述错误的是()。
A.线性表采用顺序存储必须占用一片连续的存储空间
B. 线性表采用链式存储不必占用一片连续的存储空间
C. 线性表采用链式存储便于插入和删除操作的实现
D. 线性表采用顺序存储便于插入和删除操作的实现
2. 设指针变量p指向单链表中结点A,若删除单链表中结点A,则需要修改指针
的操作序列为()。
A.q=p->next;p->data=q->data;p->next=q->next;free(q);
B. q=p->next;q->data=p->data;p->next=q->next;free(q);
C. q=p->next;p->next=q->next;free(q);
D. q=p->next;p->data=q->data;free(q);
3. 设一维数组中有n个数组元素,则读取第i个数组元素的平均时间复杂度为
()。
n) C. O(1) D. O(n2)
A. O(n)
B. O(nlog
2
4.设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度为()。
A. O(log
n) B. O(1) C. O(n2) D. O(n)
2
5.设一条单链表的头指针变量为head且该链表没有头结点,则其判空条件是()。
A. head==0
B.head->next==0
C. head->next==head
D.head!=0
6.设带有头结点的单向循环链表的头指针变量为head,则其判空条件是()。
A. head==0
B. head->next==0
C. head->next==head
D. head!=0
7.建立一个长度为n的有序单链表的时间复杂度为()
A. O(n)
B. O(1)
C. O(n2)
D. O(log
n)
2
8.设顺序线性表中有n个数据元素,则删除表中第i个元素需要移动()个元素。
A. n-i
B. n+l -i
C. n-1-i
D. i
9.设指针变量p指向双向链表中结点A,指针变量s指向被插入的结点X,则在结点A的后面插入结点X的操作序列为()。
A. p->right=s; s->left=p; p->right->left=s; s->right=p->right;
B. s->left=p;s->right=p->right;p->right=s; p->right->left=s;
C. p->right=s; p->right->left=s; s->left=p; s->right=p->right;
D. s->left=p;s->right=p->right;p->right->left=s; p->right=s;
10.设某链表中最常用的操作是在链表的尾部插入或删除元素,则选用下列()存储方式最节省运算时间。
A. 单向链表 B .单向循环链表
C. 双向链表
D. 双向循环链表
11.设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,指针s指向被插入的结点X,则在结点A和结点B插入结点X的操作序列为()。
A. s->next=p->next;p->next=-s;
B. q->next=s; s->next=p;
C. p->next=s->next;s->next=p;
D. p->next=s;s->next=q;12.在一个长度为n的顺序存储的线性表中,向第i个元素(1≤i≤n+1)之前插入一个新元素时,需要从后向前依次后移()个元素。
A.n-i B.n-i+1 C.n-i-1 D.i
13.在一个单链表HL中,若要在指针q所指结点的后面插入一个由指针p所指向的结点,则执行()。
A. q->next=p->next;p->next=q;
B. p->next=q->next;q=p;
C. q->next=p->next;p->next=q;
D. p->next=q->next;q->next=p;
14.在单链表中,存储每个结点需要有两个域,一个是数据域,另一个是指针域,指针域指向该结点的()
A.直接前趋
B.直接后继
C.开始结点
D.终端结点
15.将两个各有n个元素的有序表合并成一个有序表,其最少的比较次数为()
A.n
B.2n-1
C.2n
D.n2
16.线性表采用链式存储结构时,要求内存中可用存储单元的地址( )
A. 必须是连续的
B. 必须是部分连续的
C. 一定是不连续的
D. 连续和不连续都可以
17.设h是指向非空带表头结点的循环链表的头指针,p是辅助指针。
执行程序段
p=h;
while (p->next->next!=h)
p=p->next;
p->next=h;
后(其中,p->next为p指向结点的指针域),则( )
A. p->next指针指向链尾结点
B. h指向链尾结点
C. 删除链尾前面的结点
D. 删除链尾结点
18.设顺序表有19个元素,第一个元素的地址为200,且每个元素占3个字节,则第14个元素的存储地址为( )
A.236
B.239
C.242
D.245
19.设顺序表有9个元素,则在第3个元素前插入一个元素所需移动元素的个数为( )
A.5
B.6
C.7
D.9
20.设p为指向双向循环链表中某个结点的指针,p所指向的结点的两个链域分别用p→llink和p→rlink表示,则同样表示p指针所指向结点的表达式是( )
A.p→llink
B.p→rlink
C.p→llink→llink
D.p→llink→rlink
21.一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元
素的存储地址是( )
A. 110
B. 108
C. 100
D. 120
22.关于存储相同数据元素的说法中正确的是()
A.顺序存储比链式存储少占空间
B.顺序存储比链式存储多占空间
C.顺序存储和链式存储都要求占用整块存储空间
D.链式存储比顺序存储难于扩充空间
23.已知一个单链表中,指针q指向指针p的前趋结点,若在指针q所指结点和指针p所指结点之间插入指针s所指结点,则需执行()
A.q→next=s;p→next=s; B.q→next=s;s→next=p;
C.q→next=s;q→next=p;
D.q→next=s;s→next=q;24.在长度为n的线性表中删除一个指针p所指结点的时间复杂度是()A.O(n) B.O(1)
C.O(log
2
n) D.O(n2)
25.若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则最节省运算时间的存储方式是()
A.单链表
B.仅有头指针的单循环链表
C.双链表
D.仅有尾指针的单循环链表
26.从一个长度为n的顺序表中删除第i个元素(1≤i≤n)时,需向前移动的元素的个数是()
A.n-i
B.n-i+1
C.n-i-1
D.i
27.对于长度为n的顺序表执行删除操作,则其结点的移动次数()
A.最少为0,最多为n
B.最少为1,最多为n
C.最少为0,最多为n-1
D.最少为1,最多为n-1
28.在一个单链表中,若p所指结点是q所指结点的前驱结点,则删除结点q的正确操作是()
A. p->next=q
B. p->next=q->next
C. p=q->next
D. p->next=q->next->next
29.在一个具有n个结点的有序单链表中插入一个新结点,并使插入后仍然有序,则该操作的时间复杂性量级为()
A.O(1) B.O(n)
C.O(nlog
2
n) D.O(n2)
30.顺序存储的线性表(a
1,a
2
,…,a
n
),在任一结点前插入一个新结点时所需移
动结点的平均次数为()
A.n B.n/2
C.n+1 D.(n+1)/2
31.设单链表中指针p指向结点A,若删除A后的结点存在,则需要修改指针的操作为()。
A.p->next=p->next->next B.p=p->next
C.p=p->next->next D.p->next=p
32.线性表的链式存储实现有利于()运算。
A.插入 B.读表元
C.查找 D.定位
33.从一个长度为n的顺序表中删除第i个元素(1≤i≤n),需向前移动()
个元素。
A.n-i B.n-i+1
C.n-i-1 D.i
34.在一个长度为n的顺序存储线性表中,向第i个元素(1≤i≤n+1)之前插入一个新元素时,需向后移动()个元素。
A.n-i B.n-i+1
C.n-i-1 D.i
35.在一个单链表中,已知*q结点是*p结点的前趋结点,若在*q和*p之间插入*s结点,则需执行()。
A.s->next=p->next; p->next=s; B.q->next=s; s->next=p;
C.p->next=s->next; s->next=p; D.p->next=s; s->next=q;
36.在一个单链表HL中,若要向表头插入一个由指针p指向的结点,则执行()。
A.HL = p; p->next = HL;
B.p->next = HL; HL = p;
C.p->next = HL; p = HL;
D.p->next = HL->next; HL->next = p;
37.在一个单链表HL中,若要删除由指针q所指向结点的后继结点,则执行()。
A.p = q->next ; p->next = q->next;
B.p = q->next ; q->next = p;
C.p = q->next ; q->next = p->next;
D.q->next = q->next->next; q->next = q;
38.线性表采用链式存储时,其地址()。
A.必须是连续的 B.部分地址必须是连续的
C.一定是不连续的 D.连续与否均可以
39.在一个长度为n的线性表中插入第i个元素的操作中,i的取值范围是A.1≤i≤n B.0≤i≤n C.1≤i≤ n+1 D.1≤i≤n-1 40.如果要查找单链表中的第i个元素,应该从()开始进行查找。
A.第i个结点 B.头结点 C.尾结点 D.任意一个结点41.在一个长度为n的线性表中顺序查找值为x的元素时,查找时的平均查找长度(即x同元素的平均比较次数,假定查找每个元素的概率都相等)为()。
A.n
B.n/2
C. (n+1)/2
D. (n-1)/2
42.在一个单链表HL中,若要在指针q所指的结点的后面插入一个由指针p所指的结点,则执行()。
A.q->next = p->next ; p->next = q;
B.p->next = q->next; q = p;
C.q->next = p->next; p->next = q;
D.p->next = q->next ; q->next = p;
43. 在一个单链表中,若q所指结点是p所指结点的前驱结点,若在q与p之间插入一个s所指的结点,则执行( )。
A. s→link=p→link; p→link=s;
B. p→link=s; s→link=q;
C . p→link=s→link; s→link=p; D. q →link=s; s→link =p;
44. 线性链表不具有的特点是()。
A.随机访问 B.不必事先估计所需存储空间大小
C.插入与删除时不必移动元素 D.所需空间与线性表长度成正比
45. 下述哪一条是顺序存储结构的优点?()。
A.插入运算方便 B.可方便地用于各种逻辑结构的存储表示C.存储密度大 D.删除运算方便
46. 下面关于线性表的叙述中,错误的是哪一个?()。
A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
47. 若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表
48.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。
A. 单链表
B. 仅有头指针的单循环链表
C. 双链表
D. 仅有尾指针的单循环链表
49.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( )最节省时间。
A. 带头结点的双循环链表
B.单循环链表
C. 带尾指针的单循环链表
D. 单链表
50.若线性表最常用的操作是存取第I个元素及其前驱和后继元素的值,为节省时间应采用的存储方式( )。
A.单链表
B.双向链表
C.单循环链表
D.顺序表
51.静态链表中指针表示的是( )
A.下一元素的地址
B.内存储器的地址
C.下一元素在数组中的位置
D.左链或右链指向的元素的地址
52.在n个结点的线性表的数组实现中,算法的时间复杂性是O(1)的操作是( )
A. 访问第i个结点(1≤i<=n)和求第i个结点的直接前驱(2≤i<=n)
B. 在第i个结点后插入一个新结点(1≤i<=n)
C. 删除第i个结点(1≤i<=n)
D. 以上都不对
53.(1) 静态链表既有顺序存储的优点,又有动态链表的优点。
所以,它存取表中第i个元素的时间与i无关。
(2) 静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。
(3) 静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。
以上错误的是()。
A.(1),(2) B.(1) C.(1),(2),(3) D.(2)54.对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为()。
A.O(n) O(n) B. O(n) O(1) C. O(1) O(n) D. O(1) O(1)
55.单链表中,增加一个头结点的目的是为了( )。
A.使单链表至少有一个结点 B.标识表结点中首结点的位置
C.方便运算的实现 D.说明单链表是线性表的链式存储
56.对于双向循环链表,在p指针所指的结点之后插入s指针所指结点的操作应
为()。
A.p->right=s ; s->left=p; p->right->left=s ; s->right=p->right;
B.p->right=s ; p->right->left=s ; s->left=p; s->right=p->right;
C.s->left=p; s->right=p->right; p->right=s ; p->right->left=s ; ;
D.s->left=p; s->right=p->right; p->right->left=s ; p->right=s ;
57.对于一个线性表既要求能够进行较快速的插入和删除,又要求存储结构能反
映数据之间的逻辑关系,则应该用( )。
A. 顺序存储方式
B. 链式存储方式
C. 散列存储方式
D. 以上均可以
58.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:()。
A.p->next=s;s->next=p->next; B. s->next=p->next;p->next=s;
C.p->next=s;p->next=s->next; D. p->next=s->next;p->next=s;
59.线性表的顺序存储结构是一种()。
A. 随机存取的存储结构
B. 顺序存取的存储结构
C. 索引存取的存储结构
D. Hash存取的存储结构
60.顺序表是线性表的()
A、链式存储结构
B、顺序存储结构
C、索引存储结构
D、散列存储结构
61.带头结点的单链表head为空的条件是()
A、head=NULL
B、head->next=NULL
C、head->next=head
D、head!=NULL 62.链表不具有的特点是()
A.插入、删除不需要移动元素 B.可随机访问任一元素
C.不必事先估计存储空间 D.所需空间与线性长度成正比
63.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删
除运算,则利用()存储方式最节省时间。
A.顺序表 B.双链表
C.带头结点的双循环链表 D.单循环链表
64.下面关于线性表的叙述中,错误的是哪一个?()
A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
二、填空题
1.设顺序线性表中有n个数据元素,则第i个位置上插入一个数据元素需要移
动表中_______个数据元素;删除第i个位置上的数据元素需要移动表中_______
个元素。
2. 设指针变量p指向双向循环链表中的结点X,则删除结点X需要执行的语句
序列为_________________________________________________________(设结
点中的两个指针域分别为llink和rlink)。
3.设指针变量p指向单链表中结点A,则删除结点A的语句序列为:
q=p->next;p->data=q->data;p->next=___________;feee(q);
4.在带头结点的单链表L中, 第一个元素所对应的结点的指针表达式是_____________。
5.在双向循环链表中,在结点*P之前插入结点*S的语句序列是:
S-> prior = P-> prior ; S->next=P; P->prior=S; __________________。
6.在双链表中,存储一个结点有三个域,一个是数据域,另两个是指针域,分别指向_ _和_ 。
7.下面程序段的功能是利用从尾部插入的方法建立单链表的算法,请在下划线处填上正确的内容。
typedef struct node {int data; struct node *next;} lklist;
void lklistcreate(_____________ *head )
{
for (i=1;i<=n;i++)
{
p=(lklist*)malloc(sizeof(lklist));
scanf(“%d”,&(p->data));p->next=0;
if(i==1)head=q=p;else {q->next=p;____________;}
}
}
8.设指针p指向单链表中结点A,指针s指向被插入的结点X,则在结点A的前面插入结点X时的操作序列为:
1) s->next=___________;2) p->next=s;3) t=p->data;
4) p->data=___________;5) s->data=t;
9.设指针变量p指向单链表中结点A,指针变量s指向被插入的结点X,则在结点A的后面插入结点X需要执行的语句序列:s->next=p->next; _________________;。
10.设指针变量head指向双向链表中的头结点,指针变量p指向双向链表中的第一个结点,则指针变量p和指针变量head之间的关系是p=_________和head=__________(设结点中的两个指针域分别为llink和rlink)。
11.设指针变量p指向双向链表中的结点A,指针变量s指向被插入的结点X,则在结点A的后面插入结点X的操作序列为_________=p;s->right=p->right;__________=s; p->right->left=s;(设结点中的两个指针域分别为left和right)。
12.设指针变量p指向单链表中结点A,指针变量s指向被插入的新结点X,则进行插入操作的语句序列为__________________________(设结点的指针域为next)。
13.在一个单链表HL 中,若要向表头插入一个由指针p指向的结点,则应执行语句:。
14.在采用独立结点构成的双向链表中,设p和q 分别是具有Dnode * 类型的指针变量。
若双向链表中p结点之后插入一个q结点,其操作步骤为:
;
;
;
;
15.对于一个顺序存储的线性表,在表头插入元素的时间复杂度为____________,在表尾插入元素的时间复杂度为________________。
16.在一个长度为n 的顺序表中第i 个元素(1≤i ≤n )之前插入一个元素时,需向后移动____个元素。
17.设双链表中结点的前趋指针和后继指针的域名分别为t1和r1,指针s 指向双链表中的一个结点(该结点既非头结点,也非尾结点),则删除s 指针所指向结点的操作为“s->tl->r1=s->r1;”和“__ _______”。
18.设有指针head 指向不带表头结点的单链表,用next 表示结点的一个链域,指针p 指向与链表中结点同类型的一个新结点。
现要将指针p 指向的结点插入表中,使之成为第一个结点,则所需的操作为“p →next=head ;”和“____”。
19.单链表中逻辑上相邻的两个元素在物理位置上________相邻。
20.在一个长度为n 的数组中删除第i 个元素(1≤i ≤n )时,需要向前移动的元素的个数是_______。
21.在顺序表上读表元算法的时间复杂度为____。
22.双链表中前驱指针为prior ,后继指针为next ,在指针P 所指结点前插入指针S 所指的结点,需执行下列语句:
S →next=P;S →prior=P →prior;P →prior=S;_______;
23.设某非空双链表,其结点形式为若要删除指针q 所指向的结点,则需执行下述语句段:
q->prior->next =q->next; _ ____。
24.双向循环链表的优点是
25.在一个长度为n 的顺序表中删除一个元素,最少需移动 个元素,最多需移动________个元素。
26.将指向单链表中的某个结点的指针p 移动到该结点的后继结点表示为 。
27. 在线性表的单链接存储结构中,每个结点包含有两个域,一个 叫 域,另一个叫 域。
28.在下面数组a 中链接存储着一个线性表,表头指针为a[0].next ,则该线性表为 。
29.在线性表的顺序存储中,若一个元素的下标为i ,则它的前驱元素的下标为 ,后继元素的下标为 。
30.在线性表的单链接存储中,若一个元素所在结点的地址为p ,则其后继结点的地址为 ,若假定p 为一个数组a 中的下标,则其后继结点的下标为 。
31.在循环单链表中,最后一个结点的指针指向 结点。
32.在以HL 为表头指针的带表头附加结点的单链表和循环单链表中,链表为空的条件分别为 和 。
a data next
33.向一个顺序栈插入一个元素时,首先使后移一个位置,然后把待插入元素到这个位置上。
34.从一个栈中删除元素时,首先取出,然后再前移一位。
35.设单链表的结点结构为(data,next),next为指针域,已知指针px指向单链表中data为x的结点,指针py指向data为y的新结点 , 若将结点y插入结点x之后,则需要执行以下语句:_______; ______;【华中理工大学 2000 一.4(2分)】
36.在一个长度为n的顺序表中第i个元素(1<=i<=n)之前插入一个元素时,需向后移动________个元素。
【北京工商大学 2001 二.4(4分)】
37.在单链表中设置头结点的作用是________。
【哈尔滨工业大学 2000 二.1(1分)】
38.对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度为________,在给定值为x的结点后插入一个新结点的时间复杂度为________。
【哈尔滨工业大学 2001 一.1(2分)】
39.在双向循环链表中,向p所指的结点之后插入指针f所指的结点,其操作是_______、_______、_______、________。
【中国矿业大学 2000 一.1(3分)】40.顺序存储结构是通过________表示元素之间的关系的;链式存储结构是通过________表示元素之间的关系的。
【北京理工大学 2001 七.2 (2分)】41.在单链表L中,指针p所指结点有后继结点的条件是:________
【合肥工业大学 2001 三.3 (2分)】
三、判断题
1.()线性表的顺序存储结构比链式存储结构更好。
2.( )线性表就是顺序存储的表。
3.()线性表中的所有元素都有一个前驱元素和后继元素。
4.()非空的双向循环链表中任何结点的前驱指针均不为空。
5.()不论线性表采用顺序存储结构还是链式存储结构,删除值为X的结点的时间复杂度均为O(n)。
6.( )对链表进行插入和删除操作时不必移动链表中结点。
7.( )线性表只能用顺序存储结构实现。
8.( )如果某数据结构的每一个元素都最多只有一个直接前驱和一个直接后继,则该数据结构必为线性表。
9.( )采用链式结构存储线性表时,其地址可以是不连续的。
10.( )线性表中的每个元素都有一个前驱元素和后继元素。
11.( )采用顺序结构存储线性表时,其地址可以是不连续的。
12.()如果某数据结构的每一个元素都最多只有一个直接前驱和一个直接后继,则该数据结构必为线性表。
13.()线性表的唯一存储形式就是链表。
14.()线性表不能采用链式存储。
15.()在单链表中插入结点主要通过移动元素实现。
16.( )所谓静态链表就是一直不发生变化的链表。
17.( )集合与线性表的区别在于是否按关键字排序。
18.()用头部插入结点的方法建立单链表时,插入元素的顺序和链表中的元素顺序相同。
19.()线性表中的每个元素都有一个前驱元素和后继元素。
四、简答题
1.比较顺序表与单链表的优缺点。
2.说明以下三个概念的关系:头指针,头结点,首元素结点。
3.写出在双向链表中,在指针p所指结点前插入一个结点*S的语句序列。
4. 画出带头结点的单链表、单循环链表和双向循环链表的示意图,并归纳三者的不同之处。
5.写出下列中缀表达式的后缀表达式:
(1)A*B*C (2)(A+B)*C-D (3)A*B+C/(D-E) (4)(A+B)*D+E/(F+A*D)+C
6.线性表的顺序存储结构具有三个弱点:第一,在作插入或删除操作时,需要移动大量元素;第二,由于难以估计,必须预先分配较大的空间,往往使存储空间不能得到充分利用;第三,表的容量难以扩充。
试问,线性表的链式存储结构是否一定能够克服上述三个弱点?请简述之。
【北京师范大学2003二.4(6分)】7. 如何通过改链的方法,把一个单向链表变成一个与原来链接方向相反的单向链表?【中国人民大学 2001 二.4 (2分)】
五、应用题
1.在下面的每个程序段中,假定线性表La的类型为List,元素类型ElemType 为int,并假定每个程序段是连续执行的,试写出每个程序段执行后所得到的线性表La。
(1) InitList(La);
int a[]={48,26,57,34,62,79};
for(i=0; i<6; i++) InsertFront(La,a[i]);
TraverseList(La);
(2) InitList(La);
for(i=0; i<6; i++) Insert(La,a[i]);
TraverseList(La);
(3) ClearList(La);
for(i=0; i<6; i++) InsertRear(La,a[i]);
Delete(La, a[5]);
Sort(La);
Insert(La,a[5]/2);
TraverseList(La);
2.写出下面函数被调用执行后,得到的以HL为表头指针的单链表中的数据元素序列。
void AA(LNode * & HL)
{
InitList(HL);
InsertRear(HL,30);
InsertRear(HL,50);
int a[5] = {15,8,9,26,12};
for (int i=0; i<5; i++ )
InsertFront(HL,a[i]);
}
}
六、程序填空题(或算法阅读题)
1.LinkList mynote(LinkList L)
{//L是不带头结点的单链表的头指针
if(L&&L->next){
q=L;L=L->next;p=L;
S1: while(p->next) p=p->next;
S2: p->next=q;q->next=NULL;
}
return L;
}
请回答下列问题:
(1)说明语句S1的功能;
(2)说明语句组S2的功能;
(3)设链表表示的线性表为(a
1,a
2
, …,a
n
),写出算法执行后的返回值
所表示的线性表。
2.int AA(LNode *HL , ElemType x)
{
int n=0;
LNode *p=HL;
while (p!=NULL)
{
if (p->data= =x) n++;
p=p->next;
}
return n;
}
对于结点类型为LNode的单链表,以上算法的功能为:3.void BB(List &L)
{
int i=0;
while (i<st)
{
int j=i+1;
while (j<st)
{
if(L.list[j] = =L.list[i])
{
for (int k=j+1;k<L.size;k++)
L.list[k-1]=L.list[k];
L.size--;
}
else j++;
}
i++;
}
}
以上算法的功能为:
4. 已知一个单链表的表头指针为h,每个结点含元素值data和下一个结点的地址next。
链表一共有5个结点,其元素值分别为100,200,300,400,500,经过下列语句后,输出什么结果?。
(3分)
for (p=h;p->data<300;p=p->next) {
p->next = p->next->next;
}
printf(“%d”,p->data);
5. 指出下面程序段的功能是什么?
void demo1(SeqStack S)
{int i,arr[64],n=0;
while(!StackEmpty(S)) arr[n++]=Pop(S);
for(i=0;i<n;i++)
Push(S,arr[i]);
}。