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

2014-11-24 03:12:50 · 作者: · 浏览: 3
t;
}

printf("\n");
}

struct list_operations list_ops = {
.init_list = init_list,
.sort_by_inc = sort_by_inc,
.print_list = print_list,
};

/*
* 注册结构体函数;
* pList ---> 传入链表
* num_nodes ---> 链表节点数
* name ---> 链表名字
*/
struct list_str *register_list(struct list_str *pList, int num_nodes, unsigned char *name)
{
pList = (struct list_str *)malloc(sizeof(struct list_str) * num_nodes);

pList->private_cnt = num_nodes;
pList->name = name;
pList->l_ops = &list_ops;

return pList;
}

/*
* 合并链表函数;
* pList1 ---> 传入链表1
* pList2 ---> 传入链表2
* pList3 ---> 传入链表3
*/
struct list_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;
}

#include "compera_list.h"

/*
* 初始化链表节点函数;
* pList ---> 传入链表
* num_nodes ---> 链表节点数
*/
void init_list(struct list_str *pList, int num_nodes)
{
int i;
struct list_str *temp = pList;

printf("输入%s链表节点值:\n", pList->name);
for (i = 0; i < num_nodes; i++) {
printf("第%d个节点值: ", i+1);
scanf("%d", &pList->values);
pList->next = ++temp;
pList->private_cnt = num_nodes;

if (i != num_nodes - 1) {
pList++;
}
}

pList->next = NULL;
printf("\n");
}

/*
* 节点数据交换函数;
* i ---> 前级数据
* j ---> 后继数据
*/
void values_switch(int *i, int *j)
{
int temp;

temp = *i;
*i = *j;
*j = temp;
}

/*
* 递增排序函数;
* pList ---> 传入链表
* num_nodes ---> 链表节点数
*/
void sort_by_inc(struct list_str *pList, int num_nodes)
{
struct list_str *pTemp = pList;

while (pList->next) {
while (pTemp->next) {
pTemp = pTemp->next;

if (pList->values > pTemp->values) {
values_switch(&pList->values, &pTemp->values);
} else {
continue;
}

}

pList = pList->next;
pTemp = pList; // 重置pTemp指针指向单元
}

}

/*
* 打印节点数据函数;
* pList ---> 传入链表
*/
void print_list(struct list_str *pList)
{
unsigned int i;

printf("%s节点值打印:\n", pList->name);
for (i = 0; (pList != NULL) && (i < pList->private_cnt); i++) {
printf("第%d节点值为: %d\n", i+1, pList->values);
pList = pList->next;
}

printf("\n");
}

struct list_operations list_ops = {
.init_list = init_list,
.sort_by_inc = sort_by_inc,
.print_list = print_list,
};

/*
* 注册结构体函数;
* pList ---> 传入链表
* num_nodes ---> 链表节点数
* name ---> 链表名字
*/
struct list_str *register_list(struct list_str *pList, int num_nodes, unsigned char *name)
{
pList = (struct list_str *)malloc(sizeof(struct list_str) * num_nodes);

pList->private_cnt = num_nodes;
pList->name = name;
pList->l_ops = &list_ops;

return pList;
}

/*
* 合并链表函数;
* pList1 ---> 传入链表1
* pList2 ---> 传入链表2
* pList3 ---> 传入链表3
*/
struct list_