线性表--链表

基本操作:
#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 值 行指针(向右指针) 列指针(向下指针)同行同列穿起来 */

猜你喜欢

转载自www.cnblogs.com/h694879357/p/11521921.html