济南铁道职业技术学院 专升本辅导教材 数据结构
}
6.下列函数的功能是,对以带头结点的单链表作为存储结构的两个递增有序表(表中不存在值相同的数据元素)进行如下操作:将所有在Lb表中存在而La表中不存在的结点插入到La中,其中La和Lb分别为两个链表的头指针。请在空缺处填入合适内容,使其成为一个完整的算法。 void union (LinkList La, LinkList Lb) {
{ } if (pb) }
四、程序设计
1、设某头指针为head的单链表的结点结构说明如下:(6分) typedef struct node1 {
int data; struct node1*next
(3) ; if (pa -> data
{q = pb; pb = pb -> next; free (q); }
pre = pb; pb = pb -> next; (2) ;
//本算法的功能是将所有Lb表中存在而La表中不存在的结点插入到La表中 LinkList pre = La, q; LinkList pa = La -> next; LinkList pb = Lb -> next; free (Lb); while (pa && pd)
}node;
试设计一个算法void change (node*head),将该单链表中的元素按原单链表相反的次序重新存放,即第一个结点变成最后一个结点,第二个结点变为倒数第二个结点,如此等等。 2.设某带头结头的单链表的结点结构说明如下: typedef struct nodel {
int data;
struct nodel*next;
第 16 页 共 63 页
济南铁道职业技术学院 专升本辅导教材 数据结构
}node;
试设计一个算法:void copy(node*head l, node*head 2),将以head 1为头指针的单链表复制到一个不带有头结点且以head2为头指针的单链表中。(6分) 3、、设带表头结点的双向链表的定义为 typedef int ElemType;
typedef struct dnode { //双向链表结点定义 ElemType data; //数据
struct dnode * lLink, * rLink; //结点前驱与后继指针 } DblNode;
typedef DblNode * DblList; //双向链表 试设计一个算法,改造一个带表头结点的双向链表,所有结点的原有次序保持在各个结点的右链域rLink中,并利用左链域lLink把所有结点按照其值从小到大的顺序连接起来。
4、阅读以下程序说明和C程序,将应填入程序中(n) 处的字句,写在答卷的对应栏内。
[程序说明]
本子程序利用递归法判别用链表表示的两个非递归链表是否相等. 程序中的非递归列表定义为: ⑴无元素的空列表;
⑵由元素序列组成的一个列表,其中的元素可以是一个字符,?或者是满足本定义的一个列表. 这种列表的一个例子是: S
┌───┐ ┌─┬─┬─┐ ┌─┬─┬─┐ │ ├→┤0 │a│ ├-→┤1│││^│ └───┘ └─┴─┴─┘ └─┴┼┴─┘
┌──────┘
│ ┌─┬─┬─┐ ┌─┬─┬─┐ └→┤0 │b│ ├→┤0│c │^│ └─┴─┴─┘ └─┴─┴─┘
列表S由两个元素组成:第一个元素是字符a (标志为0);第二个元素是另一个列*表(标志为1),该元素又有两个元素组成(标志为0),分别为字符b和字符c.
在两个列表中,若它们的元素个数相等,且表中元素依次相同,则两个列表相等(子程序回答1),否则不相等(子程序回答0).
[程序]
typedef struct lnode
{ int tag; union
{ char data;
struct lnode *dlink; } un;
struct lnode *link; } listnode;
int equal(s,t) listnode *s,*t; { int x,res; if(s==t) __(1)__ ;
else if( __(2)__ )
第 17 页 共 63 页
济南铁道职业技术学院 专升本辅导教材 数据结构
if( __(3)__ ) { if(!s->tag) x= __(4)__ ; else
x= __(5)__ ;
if(x) return (__(6)__); }
return(0);
}
5、阅读下列函数说明和C代码,将应填入其中__(n)__处的字句写在答卷的对应栏内。 【函数1.1说明】 设链表结点的类型为
typedef struct elem{ int val;
struct elem *next; }intNode;
函数merge(int *a,int *b)是将两个升序链表a和b合并成一个升序链表。 【函数1.1】
intNode *merge(intNode *a,intNode *b) { intNode *h=a,*p,*q; while(b)
{ for (p=h;p && p→val< b→val;q=p,p = p→next); if (p = = h) __(1)__;else __(2)__; q=b;b=b→next; __(3)__; }
return h; }
【函数1.2说明】
递归函数dec(int a[],int n)判断数组a[]的前n个元素是否是不递增的。不递增返回1,否则返回0。 【函数1.2】
int dec(int a[],int n) { if (n<=1) __(4)__;