参考王道考研课程,线性表定义,创建一个数据类型为int的链表。
1.定义结点的结构体
typedef struct LNode
{
int data;
LNode* next;//结构体指针
}LNode,*LinkList;
2.初始化头结点
bool InitList(LinkList &list)
{
list = new LNode;
list->next = NULL;
return true;
}
3.判断结点是否为空
bool empty(LinkList& list)
{
return (list == NULL);
}
4.插入结点函数
//在第i个位置插入e
bool Insert(LinkList& L, int i, int e)
{
if (i < 1)
return false;//i过小
LNode* p= L;
int j = 0;
while (p != NULL && j < i - 1)
{
p = p->next;
j++;
}
if (p == NULL)
return false;//i过大
LNode* s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
//在结点p之后插入e;
bool InsertNextNode(LNode* p, int e)
{
if (p == NULL)
return false;
LNode* s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
//在结点p之前插入e;
bool InsertPriorNode(LNode* p, int e)
{
if (p == NULL)
return false;
LNode* s = new LNode;
s->next = p->next;
p->next = s;
s->data = p->data;
p->data = e;
return true;
}
5.删除结点函数
//删除表中第i个位置的元素,并记录删除的值e
bool DeleteNode(LinkList& L, int i, int& e)
{
if (i < 1)
return false;//i过小
LNode* p = L;
int j = 0;
while (p != NULL && j < i - 1)
{
p = p->next;
j++;
}
if (p == NULL)
return false;//i过大
if (p->next == NULL)
return false;//i-1个结点之后没有其他结点
LNode* q = p->next;
e = q->data;
p->next = q->next;
delete q;
return true;
}
//删除指定结点p(如果p为最后一个结点则会出错)
bool DeleteNode(LNode *p)
{
if (p == NULL)
return false;
LNode* q = p->next;
p->data = p->next->data;
p->next = q->next;
delete q;
return true;
}
6.查找函数
//查找第i个结点
LNode* GetElem(LinkList L, int i)
{
if (i < 0)
return NULL;
LNode* p = L;
int j = 0;
while (p != NULL && j < i)
{
p = p->next;
j++;
}
return p;
}
//查找第一个值为e的结点
LNode* Search(LinkList L, int e)
{
LNode* p = L->next;
while (p != NULL && p->data != e)
p = p->next;
return p;
}
7.求表长
int GetLen(LinkList L)
{
int len = 0;
LNode* p = L;
while(p->next!=NULL)
{
p = p->next;
len++;
}
return len;
}