单链表、C逆序、C两个递增的链表合并成一个递增的链表
1 ( 35分 )
请完成下列算法填空实现对顺序表逆置存储,逆置存储是指将元素线性关系逆置后的顺序存储,例如(a0,a1,a2),关系逆置后为(a2,a1,a0).
SeqList的结构体定义如下:
typedef struct seqList
{
int n;
int maxLength;
ElemType *element;
}SeqList;
void Invert(SeqList *L) {
ElemType temp; int i;
for ( i=0; i<________; i++) {
temp =____________;
L->element[i] = L->element[___________];
L->element[________] = ___________; }
}
注意:程序题语法错误不扣分,为了避免程序题在互评时因为语法错误被误伤,请尽量写清楚注释,或简单描述一下算法思想。
参:
`void Invert(SeqList *L)
{
ElemType temp;
int i;
for(i = 0;i<(L->n)/2;i++)
{
temp = L->element[i];
L->element[i] = L->element[n-1-i];
L->element[n-1-i] = temp;
}
}`
2、请完成下列算法填空现对单链表的逆置存储,逆置存储是指将元素线性关系逆置后的链表存储,例如(a0,a1,a2),关系逆置后为(a2,a1,a0).
单链表结点Node和单链表SingleList结构体定义如下:
typedef struct node
{
ElemType element;
struct node *link;
}Node;
typedef struct singlelist
{
Node *first;
int n;
}SingleList;
void invert(SingleList *L) {
Node *p=__________,*q;
L->first=NULL;
while (_____) {
q=p->link;
p->link=_______;
L->first=_______;
p=_______; }
}
参
void invert(SingleList *L)
{
Node *p = L->first ,*q;
L->first = NULL;
while(p != NULL)
{
q = p->link;
p->link = L->first ;
L->first = p;
p = q;
}
}
此题是利用两个新建指针,从后往起一个一个改变节点指向。最终的运行结果是 L->first指向尾节点、p = q = NULL
3、完成下列算法填空,将两个有序递增的带表头结点的单链表合并为一个有序递增的单链表。
链表结点Node和链表SingleList结构体定义如下:
typedef struct node
{
ElemType element;
struct node *link;
}Node;
typedef struct headerlist
{
Node *head;
int n;
}HeaderList;
void MergeList1(HeaderList *La,HeaderList *Lb,HeaderList *Lc) {
Node *pa,*pb,*pc,*q;
pa=La->head->link;
pb=Lb->head->link;
pc=Lc->head;
while(pa && pb) {
if(____________________) {
pc->link=pa;
pc=pa;
pa=pa->link;
La->n--; }
else if(pa->element>pb->element) {
pc->link=___________;
pc=________;
pb=_________;
Lb->n--; }
else {
pc->link=pa;
pc=pa;
pa=_________;
q=_________;
free(pb);
pb =q; }
Lc->n++; }
pc->link=pa?pa:pb;
}
参:
while(pa&&pb)
{
if(pa->element < pb->element)
{
pc->link = pa;
pc = pa;
pa = pa->link;
La->n--;
}
else if(pa->element > pb->element)
{
pc->link = pb;
pc = pb;
pb = pb->link;
Lb->n--;
}
else
{
pc->link = pa;
pc = pa;
pa = pa->link;
q = pb->link;
free(pb);
pb = q;
}
Lc->n++;
}
此题注释比较详细,自己也刚刚起步学习,对数据结构的专业术语表达也有限,所以这里如果能给你一丢丢帮助的话我也会很开心哟,有什么问题或者改善的地方可以私信我,谢谢。