1.定义
单链表就是用链式存储的线性表
其每个元素都由两个元素组成,数据域和指针域,其格式如图所示
2.单链表的实现
头文件:
1 #ifndef _LINKLIST_H 2 #define _LINKLIST_H 3 4 struct Node 5 { 6 int data; 7 Node *next; 8 }; 9 class LinkList 10 { 11 public: 12 LinkList(); 13 ~LinkList(); 14 bool insert_data(int pos, int data); 15 int delete_data(int pos); 16 17 public: 18 void show(); 19 20 private: 21 Node *m_head; 22 int m_length; 23 }; 24 #endif
源文件:
1 #include "linklist.h" 2 #include <iostream> 3 /* 4 *@brief:构造函数 实现头节点初始化 5 *@params: 6 *@return: 7 */ 8 LinkList::LinkList() : m_length(0) 9 { 10 m_head = new Node; 11 m_head->next = NULL; 12 } 13 14 /* 15 *@brief:析构函数 实现链表销毁操作 16 *@params: 17 *@return: 18 */ 19 LinkList::~LinkList() 20 { 21 Node *cur = m_head; 22 Node *next; 23 while (cur) 24 { 25 next = cur->next; 26 delete cur; 27 cur = next; 28 } 29 m_length = 0; 30 } 31 32 /* 33 *@brief:显示函数 测试使用 34 *@params:void 35 *@return:void 36 */ 37 void LinkList::show() 38 { 39 Node *cur = m_head->next; 40 while (cur) 41 { 42 std::cout << cur->data << ' '; 43 cur = cur->next; 44 } 45 std::cout << std::endl; 46 } 47 /* 48 *@brief:在指定位置插入一个结点 49 *@params: pos:待插入位置 50 * data:插入的数据 51 *@return: 成功:true 52 * 失败:false 53 */ 54 bool LinkList::insert_data(int pos, int data) 55 { 56 if (pos < 1 || pos > m_length + 1) 57 return false; 58 59 Node *cur = m_head; 60 int moveCount = pos - 1; 61 int i = 0; 62 while (moveCount--) //cur移动到pos结点的前一个结点 63 cur = cur->next; 64 65 Node *new_node = new Node; 66 new_node->data = data; 67 new_node->next = cur->next; 68 cur->next = new_node; 69 m_length++; 70 return true; 71 } 72 73 /* 74 *@brief:删除指定位置的数据 75 *@params: pos:待删除位置 76 *@return: 成功:删除的元素值 77 * 失败:-1 78 */ 79 int LinkList::delete_data(int pos) 80 { 81 if (pos < 1 || pos > m_length) 82 return -1; 83 84 int moveCount = pos - 1; 85 Node *cur = m_head; 86 while (moveCount--) //cur移动到pos前一个结点出 87 cur = cur->next; 88 Node *next = cur->next; 89 int data = next->data; 90 cur->next = next->next; 91 delete next; 92 m_length--; 93 return data; 94 }
3.单链表和顺序表优缺点
顺序表: 优点--可随机存储,存储密度高
缺点--要去大片连续空间,改变容量不方便
单链表:优点--不要求大片连续空间,改变容量方便
缺点--不可随机存储,要耗费一定空间存放指针