组合两链表,并拷贝至新链表中(C版) (三)

2014-11-24 03:12:50 · 作者: · 浏览: 1
str *compera_list(struct list_str *pList1, struct list_str *pList2, struct list_str *pList3)
{
unsigned int i;
struct list_str *temp = pList3;
struct list_str *pRet = pList3;

/*
* 组合链表
*/
for (i = 0; i < pList1->private_cnt; i++)
{
pList3->values = pList1->values;
pList3++;
if (NULL != pList1->next) {
pList1++;
}
temp->next = pList3;
temp = temp->next;
}
for (i = 0; i < pList2->private_cnt; i++)
{
pList3->values = pList2->values;
pList3++;
if (NULL != pList2->next) {
pList2++;
} else {
break;
}
temp->next = pList3;
temp = temp->next;
}
temp->next = NULL;
/*
* 指针归位操作
*/
pList3 = pRet;

return pList3;
}

main.c:


[cpp]
#include "compera_list.h"

/*
* 声明要使用的全局变量:
* *list_A;
* *list_B;
* *list_C;
*/
static struct list_str *list_A;
static struct list_str *list_B;
static struct list_str *list_C;

int main(int argc, char *argv[])
{
unsigned int size_A;
unsigned int size_B;

/*
* size_A: 指定list_A长度
* size_B: 指定list_B长度
*/
printf("输入A链表与B链表的长度(如2,3):");
scanf("%d,%d", &size_A, &size_B);
printf("\n");

/*
* 分配指针空间与构建list操作函数成员
*/
list_A = register_list(list_A, size_A, "list_A");
list_B = register_list(list_B, size_B, "list_B");
list_C = register_list(list_C, (size_A + size_B), "list_C");

/*
* 初始化节点值
*/
list_A->l_ops->init_list(list_A, size_A);
list_B->l_ops->init_list(list_B, size_B);

/*
* 按递增形式排序
*/
list_A->l_ops->sort_by_inc(list_A, size_A);
list_B->l_ops->sort_by_inc(list_B, size_B);

/*
* 组合list_A与list_B
*/
list_C = compera_list(list_A, list_B, list_C);

/*
* 按递增形式排序
*/
list_C->l_ops->sort_by_inc(list_C, (size_A + size_B));

/*
* 打印节点内容
*/
list_A->l_ops->print_list(list_A);
list_B->l_ops->print_list(list_B);
list_C->l_ops->print_list(list_C);

/*
* 释放指针空间
*/
free(list_A);
free(list_B);
free(list_C);

return 0;
}

#include "compera_list.h"

/*
* 声明要使用的全局变量:
* *list_A;
* *list_B;
* *list_C;
*/
static struct list_str *list_A;
static struct list_str *list_B;
static struct list_str *list_C;

int main(int argc, char *argv[])
{
unsigned int size_A;
unsigned int size_B;

/*
* size_A: 指定list_A长度
* size_B: 指定list_B长度
*/
printf("输入A链表与B链表的长度(如2,3):");
scanf("%d,%d", &size_A, &size_B);
printf("\n");

/*
* 分配指针空间与构建list操作函数成员
*/
list_A = register_list(list_A, size_A, "list_A");
list_B = register_list(list_B, size_B, "list_B");
list_C = register_list(list_C, (size_A + size_B), "list_C");

/*
* 初始化节点值
*/
list_A->l_ops->init_list(list_A, size_A);
list_B->l_ops->init_list(list_B, size_B);

/*
* 按递增形式排序
*/
list_A->l_ops->sort_by_inc(list_A, size_A);
list_B->l_ops->sort_by_inc(list_B, size_B);

/*
* 组合list_A与list_B
*/
list_C = compera_list(list_A, list_B, list_C);

/*
* 按递增形式排序
*/
list_C->l_ops->sort_by_inc(list_C, (size_A + size_B));

/*
* 打印节点内容
*/
list_A->l_ops->print_list(list_A);
list_B->l_ops->print_list(list_B);
list_C->l_ops->print_list(list_C);

/*
* 释放指针空间
*/
free(list_A);
free(list_B);
free(list_C);

return 0;
}

在娴熟的技术,都源于不断的训练。