定义一个新的顺序表lc,其长度是两个顺序表la和lb的长度之和,设置3个指针la与lb,指针指向内容进行比较,小的放入lc,并调整相应指针值

来源:学生作业帮助网 编辑:作业帮 时间:2024/07/07 03:38:32
定义一个新的顺序表lc,其长度是两个顺序表la和lb的长度之和,设置3个指针la与lb,指针指向内容进行比较,小的放入lc,并调整相应指针值
xW[SF+L3ָIv ̄>-d:6+ F@ 3 N@imOPcv%?/vuH=go9+F2]nhx{˽&jԄV.z;]5Rq.`T;zzDZmbZ SFw8µYPpVNH wjf{;W##HftLfbK$78 #tVr? +ܼ$+Y.Ɔœ"faa8v`A!M@/%#$g)dTf2惼U7DSGkMR?-*c(v}9Jh^k )Wt1;*hRV!:8q6NOdx?t:+\7HS"/3Krd8FE{HlL 7_re2OSȚ-@8B(6aMkjwzkyT{Jbʇ,ĊNMKt:@ ;@XRYVI4h.'RZQ[|ÖZdʹ}0jC]irnJނ|bw{ѵ(@yӞ0Sзb|6h17{chg H^)I*W8+`*&+<͋dӛQ\3!,'n o( C ނBC:`ʽ7ZϮZKU!ϭ[{ ?d7g݋ ,h;ޟ{νF/?+D ِWı>91TB[As)։؄yMmKgO`]V_rgъ_k UNkp +xF7XCAݧp;d||13~ۭX vd:S̏4`

定义一个新的顺序表lc,其长度是两个顺序表la和lb的长度之和,设置3个指针la与lb,指针指向内容进行比较,小的放入lc,并调整相应指针值
定义一个新的顺序表lc,其长度是两个顺序表la和lb的长度之和,设置3个指针la与lb,指针指向内容进行比较,小的放入lc,并调整相应指针值

定义一个新的顺序表lc,其长度是两个顺序表la和lb的长度之和,设置3个指针la与lb,指针指向内容进行比较,小的放入lc,并调整相应指针值
#include
#include
/*线性表*/
struct TLink {
int data;
struct TLink * next;
};/*end struct TLink*/
/*生成新元素*/
struct TLink * new_item(int number)
{
struct TLink * r = 0;
r = (struct TLink *)malloc(sizeof(struct TLink));
r->data = number;
r->next = 0;
return r;
}/*end new_item*/
/*在线性表中查询数据*/
struct TLink * lookup(struct TLink * root,int number)
{
struct TLink * h = root;
while(h) {
if (h->data == number) return h;
h = h->next ;
}/*end lookup*/
return 0;
}
/*在线性表中追加一个数据*/
void append(struct TLink * * root,int number)
{
struct TLink * r = 0,* n = 0;
if (!root) return ;
/*不记录重复元素*/
if (lookup(*root,number)) return;
/*如果表为空则新建表*/
r = *root;
if (!r) {
*root = new_item(number);
return ;
}/*end if*/
/*为保证为有序线性表,如果数据比表头还小则作为表头*/
if (number < r->data ) {
n = new_item(number);
n->next = r;
*root = n;
return ;
}/*end if*/
/*在有序线性表中查找位置插入元素*/
while(r) {
n = r->next ;
/*如果已经是表尾则直接追加*/
if (!n) {
n = new_item(number);
r->next = n;
return ;
}/*end if*/
/*在中央某处插入*/
if (number < n->data ) {
r->next = new_item(number);
r->next->next = n;
return ;
}/*end if*/
r = n;
}/*end while*/
}/*end append*/
/*打印有序线性表*/
void print(struct TLink * root)
{
struct TLink * r = root;
printf("【");
while(r) {
printf("%d ",r->data );
r = r->next ;
}/*end while*/
printf("\b】\n");
}/*end print*/
/*将有序线性表h1合并至有序线性表h0,并销毁线性表h1*/
void merge(struct TLink ** h0,struct TLink ** h1)
{
struct TLink * h = 0,* k = 0;
if (!h0 || !h1) return ;
h = *h1;
while(h) {
append(h0,h->data );
k = h;
h = h->next ;
free(k);
}/*end h*/
h1 = 0;
}
int main(void)
{
int i = 0; struct TLink * x=0,*y = 0;
int a[] = {8,4,3,9,5,1};
int b[] = {7,2,1,5,6,0};
printf("原数据为:\n数组A:【");
for(i = 0; i < 6; i++) {
printf("%d ",a[i]);
append(&x,a[i]);
}/*next*/
printf("\b】\n数组B:【");
for(i = 0; i < 6; i++) {
printf("%d ",b[i]);
append(&y,b[i]);
}/*next*/
printf("\b】\n转换为有序线性表\nA:");
print(x);
printf("B:");
print(y);
printf("AB合并后为:");
merge(&x,&y);
print(x);
return 0;
}
/*以上是顺序线性表的合并程序,逆序只需将插入条件从小于改为大于即可.
合并结果如果要保留,把合并函数的lookup调用删除即可*/