基本操作:
#include<iostream>
using namespace std;
typedef struct LNode *List;
struct LNode {
int Data;
List next;
};
struct LNode L;
int length(List PtrL)//求表长
{
List p = PtrL;
int j = 0;
while (p) {
p = p->next;
j++;
}
return j;
}
List FindKth(int K, List PtrL)//按K的查找
{
List p = PtrL;
int i = 1;
while (i < K&&p != NULL)
{
p = p->next;
i++;
}
if (i == K)return p;
else
return NULL;
}
List Find(int X, List PtrL)//按值查找
{
List p = PtrL;
while (p != NULL && p ->Data != X)
{
p = p->next;
}
return p;
}
List Insert(int X, int i,List PtrL)//插入操作
{
List p, s;
if (i == 1)
{
s = (List)malloc(sizeof(struct LNode));
s->Data = X;
s->next = PtrL;
return s;
}
p = FindKth(i - 1, PtrL);
if (p == NULL)
{
cout << "参数i错误" << endl;
return NULL;
}
else
{
s = (List)malloc(sizeof(struct LNode));
s->Data = X;
s->next = p->next;
p->next = s;
return PtrL;
}
}
List Delete(int i, List PtrL)
{
List p, s;
if (i == 1)
{
s = PtrL;//s指向第一个结点
if (PtrL != NULL)
{
PtrL = PtrL->next;
}
else
return NULL;
free(s);//释放被删除的结点
return PtrL;
}
p=FindKth(i - 1, PtrL);
if (p == NULL)
{
cout << "这个结点不存在" << endl;
return NULL;
}
else
if (p->next == NULL)
{
cout << "不存在" << endl;
return NULL;
}
else
{
s = p->next;//s是需要被删除的结点
p->next = s->next;
free(s);
return PtrL;
}
}
//广义链表
typedef struct GNode *GList;
struct GNode {
int tag;//0表示结点是单元素,1表示广义表
union {
int Data;
GList sublist;
} UGegion;
GList Next;
};
/*
多重链表 双向链表不是多重链表 树图都可以用多重链表用来存储
十字链表存储稀疏矩阵 只存储非0元素 行坐标Row 列坐标Col 值
行指针(向右指针) 列指针(向下指针)同行同列穿起来
*/