个人使用的模板
#pragma once
#include<iostream>
#define ElemType int
#define OK 1
#define ERROR 0
typedef struct
{
ElemType data;
LNode* next;
}LNode,*LinkList;
typedef struct
{
ElemType data;
DoubleNode* next, * prior;
}DoubleNode, * DoubleList;
int InitList(LinkList& L)
{
L = new LNode;
L->next = NULL;
return OK;
}
int IsEmpty(LinkList L)
{
if (L->next)
return 0;
return 1;
}
int DestroyList(LinkList& L)
{
LNode* p;
while (L)
{
p = L;
L = L->next;
delete p;
}
return OK;
}
int ClearList(LinkList& L)
{
LNode* p, * q;
p = L->next;
while (p)
{
q = p->next;
delete p;
p = q;
}
L->next = NULL;
return OK;
}
int LengthList(LinkList L)
{
LNode* p;
p = L->next;
int cnt = 0;
while (p)
{
p = p->next;
cnt++;
}
return cnt;
}
int GetElem(LinkList L, int pos, ElemType& e)
{
LNode* p = L->next;
int cnt = 1;
while (p && cnt < pos)
{
p = p->next;
cnt++;
}
if (!p || cnt > pos)return ERROR;
e = p->data;
return OK;
}
LNode * LocateElem(LinkList L, ElemType e)
{
LNode* p = L->next;
while (p && p->data != e)
p = p->next;
return p;
}
int PositionElem(LinkList L, ElemType e)
{
LNode* p = L->next;
int cnt = 1;
while (p && p->data != e)
{
p = p->next;
cnt++;
}
if (p) return cnt;
return 0;
}
int InsertList(LinkList& L, int pos, ElemType e)
{
LNode* p = L;
int cnt = 0;
while (p && cnt < pos - 1)
{
p = p->next;
cnt++;
}
if (!p || cnt > pos - 1) return ERROR;
LNode* s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
int DeleteList(LinkList& L, int pos, ElemType e)
{
LNode* p = L;
int cnt = 0;
while (p && cnt < pos - 1)
{
p = p->next;
cnt++;
}
if (!(p->next) || cnt > pos - 1) return ERROR;
LNode* q = p->next;
p->next = q->next;
e = q->data;
delete q;
return OK;
}
int InsertFront(LinkList& L,int n)
{
L = new LNode;
L->next = NULL;
for (int i = n; i >= 1; --i)
{
LNode* p = new LNode;
std::cin >> p->data;
p->next = L->next;
L->next = p;
}
}
int InsertBack(LinkList& L, int n)
{
L = new LNode;
L->next = NULL;
LNode* r = L;
for (int i = 1; i <= n; ++i)
{
LNode* p = new LNode;
std::cin >> p->data;
p->next = NULL;
r->next = p;
r = p;
}
return OK;
}
LinkList Connet(LinkList Ta, LinkList Tb)
{
LNode* p = Ta->next;
Ta->next = Tb->next->next;
delete Tb->next;
Tb->next = p;
return Tb;
}
int InsertDoubleList(DoubleList& L, int pos, ElemType e)
{
DoubleNode* p = L->next;
int cnt = 1;
while (p && cnt < pos)
{
p = p->next;
cnt++;
}
DoubleNode* s = new DoubleNode;
s->data = e;
s->prior = p->prior;
p->prior->next = s;
s->next = p;
p->prior = s;
return OK;
}
int DeleteDoubleList(DoubleNode& L, int pos)
{
DoubleNode* p = L.next;
int cnt = 1;
while (p && cnt < pos)
{
p = p->next;
cnt++;
}
p->prior->next = p->next;
p->next->prior = p->prior;
delete p;
return OK;
}