单链表的操作
2016-12-25 20:42
176 查看
#include "iostream" using namespace std; class Node { public: int data; Node *next; Node(int data, Node *n ) { this->data = data; next = n; } Node(Node *n) { next = n; } }; class LLink { public: LLink() { head = tail = new Node(NULL); } void append(int data) { Node *p = new Node(data, NULL); tail->next = p; tail = p; } void display() { Node *p = head->next; while (p) { cout << p->data << " "; p = p->next; } } void insert_Node(int data) { Node *p = new Node(data, NULL); int n; cout << "请输入你想要插入节点位置的数据:" << endl; cin >> n; Node *q = head->next; while (q) { if (q->data == n) { p->next = q->next; q->next = p; } q = q->next; } } void delete_Node() { int data; cout << "请输入想要删除节点的数据:" << endl; cin >> data; Node *p = head->next; Node *q = head; while (p) { if (p->data == data) { q->next = q->next->next; } p = p->next; q = q->next; } } //头插法逆置链表 void reverse_Node() { Node *p = head->next; head->next = NULL; while (p) { Node *pnext = p->next; p->next = head->next; head->next = p; p = pnext; } } //交换两个数据 friend void swap(int &a, int &b) { int c = a; a = b; b = c; } //采用冒泡排序,这里由于单链表的限制-只能从前向后搜索,所以不死冒泡的典型范例,但是和冒泡排序一个思想 void sort_Bubble_Node() { Node *p=NULL; Node *htemp=NULL; //用来标记已经排好的最前面一个节点,以便在进行了几次后,不必在比较后面的,因为后面的已经排好序了 Node *curr = head; while (curr != htemp) { while (curr->next != htemp) //这里用来保证只对前面没有排好序的节点进行比较 { if (curr->data > curr->next->data) swap(curr->data, curr->next->data); curr = curr->next; } htemp = curr; //每次curr的最后一个代表的节点就是已经排好序的最前面的一个节点 curr = head; //这里用来保证每一个从第一个节点开始比较一直到拍好序的最前面的节点htemp } } //采用选择排序进行排序 void sort_select_Node() { Node *p = NULL; Node *curr = head->next; while (curr != tail) //每进行一次循环都将有前面的节点拍好序 { int min = curr->data; //假设每一次循环的第一个节点是最小的 p = curr->next;//用来标记没有排好序的最后一个节点 while (p) { if (min > p->data) { min = p->data; swap(p->data, curr->data); } p = p->next; } curr = curr->next; //此时的curr是没有排好序的最后一个节点 } } private: Node *head; Node *tail; }; int main() { LLink app; int a[4] = {34,22,11,77}; for (int i = 0; i < 4; i++) { app.append(a[i]); } //app.delete_Node(); //app.insert_Node(99 b86c ); //app.reverse_Node(); //app.sort_Bubble_Node(); app.sort_select_Node(); app.display(); return 0; }