C++ 实现简单的链表操作

来源:互联网 发布:数据线测试软件 编辑:程序博客网 时间:2024/06/07 06:06
C++简单链表 实现几个基本操作  其中倒叙,排序方法 使用数组来生成链表,导致 删除方法 使用delete p1 出错 如需修改可评论#include <iostream>#include <string.h>using namespace std;class Person{public:Person();~Person();void setID(int id);void setName(const char * name);int getID();char * getName() const;void setNext(Person * a);Person * getNext() const;private:int ID;char * Name;Person * next;};Person::Person() :ID(0), next(nullptr), Name(NULL){}Person::~Person(){}void Person::setID(int id) {ID = id;}void Person::setName(const char * name) {Name = new char[strlen(name) + 1];strcpy_s(Name, strlen(name) + 1, name);}int Person::getID() {return ID;}char * Person::getName() const {return Name;}Person * Person::getNext() const {return next;}void  Person::setNext(Person * a) {next = a;}class linklist{public:linklist();~linklist();void addLink(const int id, const char * Name);//添加一个节点void deletelist();//删除链表void insetNode(int position, const int id, const char * Name);//插入节点void reserve(); //倒序void sort();//排序Person * find(const int id) const;//查找一个节点void deleteNode(int position); //删除固定的节点void showList() const;//显示整个链表int getCount() const;//显示节点数目Person * getHead() const;private:Person * head;int count;};void linklist::sort() {Person * p1, *p2;p1 = head->getNext();p2 = new Person[count];for (int i = 0; i<count; i++) {if (i != count - 1) {p2[i].setNext(&p2[i + 1]);}else {p2[i].setNext(NULL);}}for (int i = 0; i<count; i++) {p2[i].setName(p1->getName());p2[i].setID(p1->getID());for (int j = 0; j<i; j++) {if (p2[i].getID()<p2[j].getID()) {Person temp;temp.setName(p2[j].getName());temp.setID(p2[j].getID());p2[j].setName(p2[i].getName());p2[j].setID(p2[i].getID());p2[i].setName(temp.getName());p2[i].setID(temp.getID());}}p1 = p1->getNext();}p1 = head->getNext();delete[] p1;this->head->setNext(p2);}Person * linklist::getHead() const {return head;}int linklist::getCount() const {return count;}void linklist::showList() const {Person  *p2;p2 = head->getNext();if (!p2) {cout << "list is empty" << endl;}while (p2->getNext() != NULL) {cout << "ID:" << p2->getID() << endl;cout << "Name:" << p2->getName() << endl;p2 = p2->getNext();}cout << "ID:" << p2->getID() << endl;cout << "Name:" << p2->getName() << endl;}linklist::linklist() :count(0){head = new Person;head->setNext(NULL);head->setName("head");head->setID(0);}linklist::~linklist(){delete head;}void linklist::addLink(const int id, const char * Name) {Person * p1, *p2;p2 = new Person;p1 = head;while (p1->getNext() != NULL){p1 = p1->getNext();}p2->setID(id);p2->setName(Name);p2->setNext(NULL);p1->setNext(p2);count++;}void linklist::deletelist() {Person * p1, *p2;p1 = head->getNext();head->setNext(NULL);while (p1 != NULL){p2 = p1->getNext();p1->setNext(NULL);delete p1;p1 = p2;}count = 0;}void linklist::insetNode(int position, const int id, const char * Name) {count++;Person * p1, *p2 = NULL;p1 = head;Person * insert_person = new Person;if (position > count || position < 1) {cout << "输入位置错误" << endl;return;}else {for (int i = 0; i < position; i++) {p2 = p1;p1 = p1->getNext();}insert_person->setID(id);insert_person->setName(Name);insert_person->setNext(p1);p2->setNext(insert_person);}cout << "insert sucessful" << endl;}void linklist::reserve() {Person * p1, *p2;Person * reser = new Person[count];p1 = head->getNext();for (int i = 0; i < count; i++) {if (i != count - 1)reser[i].setNext(&reser[i + 1]);else {reser[i].setNext(NULL);}reser[count - i - 1].setID(p1->getID());reser[count - i - 1].setName(p1->getName());p1 = p1->getNext();}p1 = head->getNext();head->setNext(NULL);while (p1 != NULL){p2 = p1->getNext();delete p1;p1 = p2;}head->setNext(reser);}Person * linklist::find(int  id) const {Person * temp;temp = head->getNext();while (temp->getID() != id&&temp->getNext() != NULL){temp = temp->getNext();}if (temp->getNext() == NULL) {return NULL;}return temp;}void linklist::deleteNode(int position) {Person * temp, *p1 = NULL;count--;temp = head;if (position > count && position < 0){cout << "Worry position " << endl;return;}for (int i = 0; i < position; i++){p1 = temp;temp = temp->getNext();}p1->setNext(temp->getNext());delete temp;}int main(void) {linklist a;a.addLink(1, "a");a.addLink(2, "b");a.addLink(3, "c");a.showList();a.reserve();a.showList();cout << "FOUND IT" << endl;cout << "Name:" << a.find(2)->getName() << endl;cout << "ID:" << a.find(2)->getID() << endl;a.insetNode(2, 10, "insert");a.showList();a.deleteNode(2);a.showList();a.sort();a.showList();return 0;}

阅读全文
0 0
原创粉丝点击