因为还有一年就毕业参加工作了,感觉码代码的手有点生,特别是对于数据结构和算法,所以从不写博客的我开始写博客了。博客随缘更新,只做记录用,欢迎大佬指出错误以及不符合一般编程习惯的地方。
先写一个最简单的链表好了,以下是头文件:
//List.h class LNode { public: int data; //数据域 LNode * next; //指针域 }; class List { public: List(); ~List(); void CreateList(); void Insert(int data, int index, bool flag = true); void Delete(int index); void printList(); void getData(int index); void exchange(int index1, int index2); int getLength(); private: LNode *head;//头结点 };
具体的实现文件以及测试的main函数:
//List.cpp #include<iostream> #include"List.h" using namespace std; List::List() { head = new LNode; head->next = NULL; cout << "创建对象成功!" << endl; } List::~List() { LNode *p = head, *s; while (p->next != NULL){ s = p->next; p = s->next; delete s; } delete p; delete head; } int List::getLength() { int len = 0; LNode *p = head; while (p->next!=NULL) { len++; p = p->next; } return len; } void List::CreateList() { int data_num,data; cout << "开始创建链表(尾插),请输入数据个数: "; cin >> data_num; for (int i = 0; i < data_num;i++) { cout << "请输入第" << i + 1 << "个数据: "; cin >> data; Insert(data, getLength() + 2, false);//这里我就没有用正儿八经的尾插,因为已经有Insert函数了 } cout << "CreateList: 创建完成" << endl; } //把元素data,插入第index个位置 void List::Insert(int data, int index,bool flag) { LNode *p = head, *s; if (index<=0) { cout << "插入失败,请输入大于0的数!" << endl; return; } if (getLength() + 1 < index) { while (p->next != NULL) { p = p->next; } s = (LNode *)new LNode[1]; s->data = data; s->next = NULL; p->next = s; if (flag != false) { cout << "Insert: 链表长度为" << getLength()-1 << ",无法插入到第" << index << "个位置;"; cout << "现将数据" << data << "插入链表尾部!" << endl; } } else { for (int i = 0; i < index-1; i++) { p = p->next; } s = (LNode *)new LNode[1]; s->data = data; s->next = p->next; p->next = s; cout << "数据" << data <<"插入" << "第" << index <<"位置成功!" << endl; } } //删除元素 void List::Delete(int index) { LNode *p = head, *s; int i = 0; if (index <= 0 || index>getLength()) { cout << "待删除元素不在链表中" << endl; return; } while (i<index-1) { i++; p = p->next; } s = p->next; p->next = s->next; cout << "第" << index <<"个元素删除成功!" << endl; delete s; } //打印链表 void List::printList() { LNode *p = head; cout << "printList: "; if (p->next==NULL) { cout << "空链表" << endl; return; } p = p->next; while (p!=NULL) { cout << p->data << " "; p = p->next; } cout << endl; } //交换元素 void List::exchange(int index1, int index2) { LNode *p = head, *s1, *s2; s1 = (LNode *)new LNode[1]; s2 = (LNode *)new LNode[1]; int data; int min = (index1 > index2) ? index2 : index1; int max = (index1 > index2) ? index1 : index2; if (min<=0 || max>getLength()) { cout << "待交换元素超过链表范围" << endl; return; } p = p->next; for (int i = 1; i <= max;i++) { if (i==min) { s1 = p; } if (i==max) { s2 = p; } p = p->next; } data = s1->data; s1->data = s2->data; s2->data = data; cout << "第" << index1 << "个元素和" << "第" << index2 << "个元素交换成功" << endl; } //打印第index个元素 void List::getData(int index) { LNode *p = head; if (index <= 0 || index>getLength()) { cout << "待查找元素不在链表中" << endl; return; } for (int i = 0; i < index;i++) { p = p->next; } cout << "第" << index << "元素为" << p->data << endl; } int main() { List list; list.CreateList(); list.printList(); list.Insert(10, 2); list.Insert(20, 10); list.printList(); list.Delete(2); list.printList(); list.getData(1); list.getData(2); list.getData(3); list.getData(4); list.getData(10); list.exchange(1,2); list.printList(); list.exchange(4, 3); list.printList(); return 0; }
运行结果如下: