这学期开始学数据结构了然而学校教材都是写的伪代码真的要掌握还是需要课后自己用c复现。看到有大神平常会把学习的内容以博客的形式记录下来从而帮助自己总结和归纳知识点我也打算尝试一下这种方法。今后会把自己常用的数据结构实现方法记录在这里也当是对自己的学习做回顾和总结。新手入门 请多指教 有错轻喷规范名称节点Node链表LinkedList头文件#includeiostream using namespace std;定义结点//定义结点 struct Node { public: int val;//存储数据 Node* next;//指针域 //构造函数 Node(int v 0) :val(v), next(NULL) {} };定义单链表类本帖中单链表均有头结点class LinkedList { public: Node* head;//头结点 int size; LinkedList()//构造函数 { head new Node; size 0; } //以下部分可插入更多功能函数 };不同功能的实现所有功能都以内置在LinkedList内的函数实现函数的插入位置已在上方注解标明初始化前插法实现逆序输入初始化//已知插入个数len前插法实现逆序输入初始化。 //如果未知插入个数那么while条件为(cinv),函数参数列表为空while下方的cinv删去 void Init_R(int len) { int v; while (len--) { cin v; Node* p new Node(v); p-next head-next; head-next p; size; } return; }后插法实现顺序输入初始化//已知插入个数len后插法实现顺序输入初始化。 //如果未知插入个数那么while条件为(cinv),函数参数列表为空while下方的cinv删去 void Init(int len) { int v; Node* tail head;//tail指向当前链表末尾从头结点开始 while (len--) { cin v; Node* p new Node(v); tail-next p; tail p; size; } return; }插入结点//在下标为i的地方插入元素e bool insert(int i, int e) { if (i0 || isize) return 0;//判断下标i是否合法 Node* p head;//p指向插入的前一个位置 while (i--) { p p-next;//移动p } Node* newnode new Node(e); newnode-next p-next; p-next newnode; size; return 1; }删除结点//删除下标为i的元素 bool remove(int i) { if (i0 || isize - 1) return 0;//注意这里的i最大只能到size-1而插入可以到size Node* p head;//p指向删除的前一个位置 while (i--) { p p-next; } Node* temp p-next;//temp用于过渡让p能跳过下一个指向下下个结点 p-next temp-next; size--; return 1; }取值//返回下标为i的结点的值存入e中 bool getval(int i, int e) { if (i0 || isize - 1) return 0;//判断下标i是否合法 Node* p head; for (int j 0; j i; j)//因为p从头结点开始遍历链表所以需要移动i1次才能移动到下标i处 { p p-next; } e p-val; return 1; }查找//查找第一个等于e的元素的下标,-1表示没有找到 int find_first(int e) { Node* p head-next;//p从下标0开始遍历链表 int index 0; while (p) { if (p-val e) { return index; } else { p p-next; index; } } if (!p) return -1; }遍历//从头开始遍历链表以输出为例 void Print() { Node* p head-next; while (p) { cout p-val ; p p-next; } cout endl; return; }销毁链表//销毁链表 void deletelist() { Node* p head; while (p) { Node* temp p-next;//temp存放下一个结点; delete p; p temp; } head NULL; size 0; return; }在主函数中新建链表int main() { LinkedList L; return 0; }