线性表
求集合(单链表)表示的并、交和差运算
目的:掌握当链表的应用和有序单链表的二路归并算法
主要算法
- Sort(LinkNode *&L)
- Union(LinkNode *ha,LinkNode *hb,LinkNode *&hc)
- Sub(LinkNode *ha,LinkNode *hb,LinkNode *&hc)
#include<stdio.h>
#include<malloc.h>
typedef char ElemType;
typedef struct LNode //单链表
{
ElemType data;
struct LNode* next;
}LinkNode;
void CreateListF(LinkNode*& L, ElemType a[], int n) //头插法建立链表
{
LinkNode* s;
L = (LinkNode*)malloc(sizeof(LinkNode)); //创建头节点
L->next = NULL;
for (int i = 0; i < n; i++)
{
s = (LinkNode*)malloc(sizeof(LinkNode));
//s->next = NULL;
s->data = a[i];
s->next = L->next;
L->next = s;
}
}
void CreateListR(LinkNode*& L, ElemType a[], int n) //尾插法建立链表
{
LinkNode* s, * r;
L = (LinkNode*)malloc(sizeof(LinkNode));
L->next = NULL;
r = L;
for (int i = 0; i < n; i++)
{
s = (LinkNode*)malloc(sizeof(LinkNode));
s->data = a[i];
r->next = s;
r = s; //r指针始终指向尾节点
}
r->next = NULL;
}
void InitList(LinkNode*& L) //初始化单链表
{
L = (LinkNode*)malloc(sizeof(LinkNode));
L->next = NULL;
}
void DestroyList(LinkNode*& L) //删除单链表
{
LinkNode* pre = L, * p = L->next;
while (pre->next != NULL) //(p!=NULL)
{
free(pre);
pre = p;
p = pre->next;
}
free(pre)