增删改查
#include <stdio.h>
#include <stdlib.h>#define OK 1
#define ERROR 0
typedef int Status;
typedef char ElemType;typedef struct Lnode {ElemType data; //结点的数据域struct Lnode* next; //节点的指针域
}Lnode,*LinkList;
初始化
Status InitList(LinkList &L) {L = new Lnode; // 1.生成新节点作为头节点,头指针指向头节点L->next = NULL; // 2.置空头节点指针域return OK;
}
计算表长 – 不算头结点
Status CountList(LinkList L) {Lnode* p = L->next;Lnode* q;int count = 0;while (p){q = p->next;count++;p = q;}return count;
}
销毁 – 从头指针开始,一次释放所有的结点
Status DestoryList(LinkList &L) {Lnode* p;while (L){p = L;L = L->next;delete p;}return OK;
}
清空
Status ClearList(LinkList& L) {Lnode* p;Lnode* q;while (p==NULL){p = L->next;q = p->next;delete p;p = q;q = q->next;}L->next = NULL;return OK;
}
判断链表为空
Status IsEmpty(LinkList L){if (L->next){return 1;}else{return 0;}
}
取值 — 取单链表中的第i个元素的内容
Status GetElem(LinkList L,int i,ElemType& e) {Lnode* p = L->next;int k = 1;if (!L->next||k>i) return Error;while (p && k<i){p = p->next;++k;}e = p->data;return OK;
}
查找 — 按值查找
Lnode *SerchElem(LinkList L, ElemType e) {Lnode* p = L->next;while (p && e != p->data){p = p->next;}return p;
}
插入 — 在第i个结点插入新结点
Status InsertElem(LinkList &L, int i, ElemType e) {Lnode* s;s->data = e;Lnode* p = L;int k = 0;while (p && k<i-1){p = p->next;++k;}if (!p || i < 1) {s->next = p->next;p->next = s;}return OK;
}
删除 — 删除第i个节点
Status DeleteElem(LinkList& L, int i) {Lnode* p = L;int j = 0;while (p->next && j<i-1){p = p->next;++j;}if (!p->next || j > i) return ERROR;Lnode* q = p->next;p->next = q->next;delete q;return OK;
}
单链表的头插法
- 从一个空表开始重复读入数据
- 生成新的节点存储新数据
- 最后一个数据最先插入
#include <iostream>
using namespace std;// 单链表的建立 --- 头插法/尾插法
// 头插法
Status HeadInsert(LinkList& L, int n) {L = new Lnode; // 头节点L->next = NULL;for (int i = n; i > 0; --i){Lnode* p = new Lnode; // 新节点cin >> p->data; //输入新节点的数值p->next = L->next; // 头节点的指针域赋值给新节点指针域L->next = p; // 新节点链接头节点}
// 尾插法
Status TailInsert(LinkList& L, int n) {L = new Lnode;L->next = NULL;Lnode* r = new Lnode; // 尾指针r = L;for (int i = 0; i < n; i++){Lnode* p = new Lnode;cin >> p->data;p->next = NULL;r->next = p;r = p;}
}