- 1
- 0
- 约4.28千字
- 约 11页
- 2026-05-09 发布于四川
- 举报
(2025年)数据结构练习题(带答案)
一、顺序表操作题
已知顺序表L存储递增整数序列(无重复元素),长度为n(n≥2)。请设计算法,将L中所有奇数移动到偶数前面,且奇数和偶数各自保持原有相对顺序(例如:原序列[2,4,1,3,5,6]处理后为[1,3,5,2,4,6])。要求时间复杂度为O(n),空间复杂度为O(1)。
答案:
采用双指针法。定义两个指针i和j,初始时i=0,j=0。遍历顺序表:
1.当L[j]为奇数时,交换L[i]和L[j],i自增1;
2.无论L[j]是否为奇数,j自增1,直到j遍历完整个顺序表。
此方法通过i指针记录奇数应放置的位置,j指针遍历寻找奇数,每次交换仅移动奇数到前半部分,偶数自然留在后半部分,且奇数和偶数的相对顺序保持不变。时间复杂度为O(n),空间复杂度为O(1)。
二、链表综合题
设有一个带头结点的单链表L,结点结构为(data,next),其中data为整型。请设计算法,将L中值为x的结点全部删除,并将删除的结点按原顺序链接成一个新链表Lx(Lx也带头结点)。要求不允许额外申请结点空间(即只能调整指针)。
答案:
步骤如下:
1.初始化Lx的头结点,定义指针pre_L(指向L当前结点的前驱)、curr_L(指向L当前结点)、tail_Lx(指向Lx的尾结点)。
2.pre_L初始化为L,cu
原创力文档

文档评论(0)