济南铁道职业技术学院 专升本辅导教材 数据结构
}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)__;
相关推荐: