三、写一个算法合并两个已排序的线性表。
(用两种方法:数组表示的线性表(顺序表)和
指针表示的线性表(链表)
)
要求:
1
、定义线性表节点的结构,并定义节点的型和位置的型。
2
、定义线性表的基本操作
3
、在
1
,
2
的基础上,完成本题。
4
、
在
main
函数中进行测试:
先构建两个有序的线性表,
然后合并这两个线性表。
四、已知一个单向链表,试给出复制该链表的算法。
要求:
1
、定义线性表的节点的结构以及节点的型和位置的型。
2
、定义线性表的基本操作
3
、在
1
,
2
的基础上,完成本题。
4
、
在
main
函数中进行测试:
先构建一个线性表,并定义一个空线性表,
然后进
行复制。
五、写出从一个带表头的单链表中删除其值等于给定值
x
的结点的算法函数:
int delete(LIST &L, int x);
如果
x
在该链表中,则删除对应结点,并返回其在链表中的位
置(逻辑位置,第一个结点的逻辑位置为
1
)
,否则返回
-1
。
要求:
1
、定义线性表的节点的结构以及节点的型和位置的型。
2
、定义线性表的基本操作
3
、在
1
,
2
的基础上,完成本题。
4
、
在
main
函数中进行测试:
先构建一个线性表,
然后调用函数删除值等于给定
值的节点。
六、写出一个将两个静态链表(属于同一个存储池)合并的算法函数:
void Merge(cursor M, cursor N);
合并的方法是将
N
链表中的所有结点添加到
M
链表的
后面,并将
N
链表的表头结点添加到空闲结点链表中。
要求:
1
、
定义静态链表的结点的结构以及结点的型
SPACE
以及位置
(
position
)
和游标
(
cursor
)
的型。
2
、定义静态链表的基本操作:
void Initialize();
初始化,将所有存储池中的结点设置为
空闲;
cursor GetNode();
从空闲链中获取一个结点;
void FreeNode(cursor q);
将结点
q
加入
到空闲链;
void Insert ( elementtype x, position p, cursor M );
在链表
M
中的位置为
p
的元素
后面添加一个值为
x
的结点;
void Delete (cursor M,
position p );
在链表
M
中删除位置为
p
的元素的后一个元素。
3
、在
1
、
2
的基础上完成本题。
4
、在
main
函数中进行测试:先构建一个存储池,然后在该存储池中创建两个静态
表,最后将这两个静态表合并。
七、利用指针表示的线性表
(
链表
)
表示一个多项式,并实现两个多项式的相加和相乘运算。
假设多项式形式为:
1
1
1
1
...
)
(
e
e
m
e
m
x
a
x
a
t
a
x
A
m
m
其中,系数
a
i
≠0
,指数
e
i
满足
e
m
>e
m-1
>…>e
2
>e
1
>=0
。
要求:
1
、定义多项式每一项的结构。
2
、定义两个多项式的相加和相乘运算函数。
3
、在
main
函数中,构建两个多项式,并测试相加和相乘运算。