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

2014-11-24 03:12:50 · 作者: · 浏览: 0

时间渐渐紧张,只能在闲暇时间里写写这类的小程序,不断锻炼编程的思路:

compera_list.h:


[cpp]
#ifndef __COMPERA_LIST_H__
#define __COMPERA_LIST_H__

/*
* list链表边界值设定
*/
#define MAXSIZE_A 2
#define MAXSIZE_B 3
#define MAXSIZE_C 6

#include
#include

/*
* list可支持方法合集结构体
*/
struct list_operations;

/*
* list结构体
*/
struct list_str {
unsigned char *name;
unsigned int values;
unsigned int private_cnt;

struct list_str *next;
struct list_operations *l_ops;
};

/*
* list可支持方法
*/
struct list_operations {
void (*init_list)(struct list_str *pList, int num_nodes);
void (*sort_by_inc)(struct list_str *pList, int num_nodes);
void (*print_list)(struct list_str *pList);
};

/*
* 可提供的外部接口API
*/
struct list_str *register_list(struct list_str *pList, int num_nodes, unsigned char *name);
struct list_str *compera_list(struct list_str *pList1, struct list_str *pList2, struct list_str *pList3);

#endif

#ifndef __COMPERA_LIST_H__
#define __COMPERA_LIST_H__

/*
* list链表边界值设定
*/
#define MAXSIZE_A 2
#define MAXSIZE_B 3
#define MAXSIZE_C 6

#include
#include

/*
* list可支持方法合集结构体
*/
struct list_operations;

/*
* list结构体
*/
struct list_str {
unsigned char *name;
unsigned int values;
unsigned int private_cnt;

struct list_str *next;
struct list_operations *l_ops;
};

/*
* list可支持方法
*/
struct list_operations {
void (*init_list)(struct list_str *pList, int num_nodes);
void (*sort_by_inc)(struct list_str *pList, int num_nodes);
void (*print_list)(struct list_str *pList);
};

/*
* 可提供的外部接口API
*/
struct list_str *register_list(struct list_str *pList, int num_nodes, unsigned char *name);
struct list_str *compera_list(struct list_str *pList1, struct list_str *pList2, struct list_str *pList3);

#endif
compera_list.c:


[cpp]
#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->nex