Written by Robert_Wang in Southwest University of Science And Technology.
#include<iostream>
using namespace std;
typedef int 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->data = a[i];
s->Next = L->Next;//把旧的链表放入新的节点域内
L->Next = s;//与头结点相连
}
}
//尾插法
void CreateListR(LinkNode *&L, ElemType a[], int n) {
LinkNode *tail, *p;
L = (LinkNode*)malloc(sizeof(LinkNode));
L->Next = NULL;
tail = L;
p = L;
int i;
for (i = 0; i < n; i++)
{
p = (LinkNode*)malloc(sizeof(LinkNode));
p->data = a[i];
tail->Next = p;
tail = tail->Next;
//L = L->Next;
}
tail->Next = NULL;
}
//初始化链表
void InitList(LinkNode *&L)
{
L = (LinkNode*)malloc(sizeof(LinkNode));
L->Next = NULL;
}
//销毁链表
void DestroyList(LinkNode *&L)
{
LinkNode *pre, *p;
pre = L;
p = L->Next;
while (p)
{
free(pre);
pre = p;
p = p->Next;
}
free(pre);
L->Next = NULL;
}
//判断链表是否为空
bool EmptyList(LinkNode *L)
{
return (L->Next == NULL);
}
//求线性表的长度
int ListLength(LinkNode *L)
{
int i = 0;
while (L)
{
i++;
L = L->Next;
}
return i;
}
//输出线性表
void DispList(LinkNode *L)
{
int i = 0;
int isFirst = 1;
while (L->Next!=NULL)
{
if (isFirst) {
isFirst = 0;
cout << L->Next->data;
}
else cout << " " << L->Next->data;
L = L->Next;
}
cout << endl;
}
bool GetElem(LinkNode * L, int i, ElemType &e)
{
int len = ListLength(L);
if (i<1 || i>len) return false;
int j = 0;
LinkNode * p = L;
while (j < i-1 ) {
p = p->Next;
j++;
}
e = p->data;
return true;
}
//按元素查找
int LocateElem(LinkNode *L, ElemType e)
{
int len = ListLength(L);
int j = 0;
while (j < len && L->data != e) {
j++;
L = L->Next;
}
if (j == len) return 0;
return j;
}
bool ListInsert(LinkNode *&L, int i, ElemType e)
{
LinkNode *p = L;
int j = 0;
int len = ListLength(L);
if (i<1 || i>len + 1) return false;
for (j = 0; j < len-1; j++)
{
p = p->Next;
}
LinkNode *s = (LinkNode*)malloc(sizeof(LinkNode));
s->data = e;
s->Next = p->Next;
p->Next = s;
return true;
}
//删除元素
bool ListDelete(LinkNode *&L, int i, ElemType &e)
{
int len = ListLength(L);
if (i<1 || i>len) return false;
int j = 0;
LinkNode *p = L;
for (j = 0; j < i - 1; j++)
{
p = p->Next;
}
e = p->Next->data;
LinkNode * q = p->Next;
p->Next = p->Next->Next;
free(q);
return true;
}
void split(LinkNode *L, LinkNode *&L1, LinkNode *&L2)
{
LinkNode *p = L->Next, *q, * r1;
L1 = L;
r1 = L1;
L2 = (LinkNode *)malloc(sizeof(LinkNode));
L2->Next = NULL;
while (p != NULL)
{
//尾插
r1->Next = p;
r1 = p;
p = p->Next;
//头插
q = p->Next;
p->Next = L2->Next;
L2->Next = p;
p = q;
}
r1->Next = NULL;
}
int main()
{
LinkNode *L,*L1,*L2,*L3;
int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
//InitList(L);
int e;
CreateListR(L, a, 10);
L3 = L;
split(L, L1, L2);
DispList(L);
DispList(L1);
DispList(L2);
return 0;
}版权声明:本文为qq_40883132原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。