根据以下要求设计实验:
编写函数
void CreateList( )
实现功能:对链表HL1中的元素按照偶数从大到小,奇数从小到大的顺序,分别复制创建链表HL2和HL3。
(注:禁止采用InsertList和SortList 函数)
(1)定义数组:a[]=(27,6 15 18 8 12 35 23 21 38]
(2)利用InsertList()按数组中元素原顺序创建链表HL1,并遍历HL1。
I(3)调用CreateList( )函数,得到链表 HL2 和 HL3。
(4)分别遍历HL2和HL3。
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct node {
int data;
struct node* next;
}node, * ptrnode;
void initlist(ptrnode& L) //初始化,申请头节点
{
L = (ptrnode)malloc(sizeof(node));
if (!L) exit(0); //内存分配不成功退出程序
L->next = NULL;
}
//创建链表L1,将原数组中的所有元素都放入L1中
void createList(ElemType* num, ptrnode& L)
{
int i;
ptrnode p, q;
p = L;
for (i = 0; i < 10; i++)
{
q = (ptrnode)malloc(sizeof(node));
if (!q) exit(0);
q->data = num[i];
q->next = NULL;
p->next = q;
p = q;
}
}
//链表的节点插入函数
void insertlist(ptrnode& L, ElemType data)
{
ptrnode p, r;
r = L;
p = (ptrnode)malloc(sizeof(node));
if (!p) exit(0);
p->data = data;
p->next = NULL;
while (r->next != NULL) r = r->next;
r->next = p;
}
//遍历L1的同时判断L1->data是否为偶数,将偶数插入L2,将奇数插入L3
void givelist(ptrnode& L2, ptrnode& L3, ptrnode L1)
{
ptrnode p;
p = L1->next;
while (p)
{
if (p->data % 2 == 0)
{
insertlist(L2, p->data);
}
else {
insertlist(L3, p->data);
}
p = p->next;
}
}
//遍历输出函数
void traverselist(ptrnode L)
{
ptrnode p;
p = L->next;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main(void)
{
ElemType num[10] = { 27,6,15,18,8,12,35,23,21,38 }; //原数组
int i;
ptrnode L1, L2, L3; //声明变量
//调用函数操作
initlist(L1);
initlist(L2);
initlist(L3);
createList(num, L1);
givelist(L2, L3, L1);
traverselist(L1);
traverselist(L2);
traverselist(L3);
return 0;
}
使用链表的操作,望采纳!