用c++写一个链表

来源:互联网 发布:神经网络算法预测股市 编辑:程序博客网 时间:2024/05/16 16:01

1.首先写头文件Linklist.h。每个节点都有两个要素:数据和指针。定义linklist类,声明一些基本操作函数,如下:

#include <iostream>struct Node {int data;Node *next;};class Linklist {private:Node * Head;public:Linklist();void CreatList1(int n);        //头插入法创建链表void CreatList2(int n);        //尾插入法创建链表void Insert(int i, int e);     //插入函数int Delete(int i);             //删除表中元素int GetData(int i);            //取得表中元素值int Search(int obj);           //在表中寻找匹配项int ListLength();              //获得表的长度void Display();                //遍历整个链表};

2.在cpp文件中重定义基本操作函数,如下:

Linklist::Linklist() {                   //构造函数Head = new Node;Head->next = NULL;}void Linklist:: CreatList1(int n) {      //头插入法创建链表Node *p;Node *temp;p = Head;cout << "请依次输入" << n << "个链表的值:";for (int i = 1; i <= n; i++) {temp = new Node;cin >> temp->data;temp->next = p->next;p->next = temp;}}void Linklist::CreatList2(int n) {      //尾插入法创建链表Node *p;Node *temp;p = Head;cout<< "请依次输入" << n << "个链表的值:";for (int i = 0; i < n; i++) {temp = new Node;cin >> temp->data;p->next = temp;p = temp;}}void Linklist::Insert(int i, int e) {       //在i处插入eNode *temp;temp = Head;int j = 0;while (temp&&j < i-1) {temp = temp->next;j++;}if (!temp || j > i - 1) {cout << "插入位置错误";}else {Node *s;s = new Node;s->data = e;s->next = temp->next;temp->next = s;}}int Linklist::Delete(int i) {          //删除i处的数据Node *temp;temp = Head;int j = 0;while (temp&&j < i - 1) {temp = temp->next;j++;}if (!temp || j > i - 1) {cout << "删除位置错误";return -1;}else {Node *s;s = temp->next;temp->next = s->next;delete s;}}int Linklist::GetData(int i){         //得到i处的元素Node *temp;temp = Head;int j = 0;while (temp&&j < i - 1) {temp = temp->next;j++;}if (!temp || j > i - 1) {cout << "寻找位置错误\n";return -1;}else {cout << i << "处的数据为:" << temp->next->data<<"\n";return temp->data;}}int Linklist::Search(int obj) {       //寻找链表中有无与obj匹配的元素int j = 1;Node *temp;temp = Head->next;while (temp && temp->data != obj) {temp = temp->next;j++;}if (temp == NULL) {cout << "该链表中无此元素"<<"\n";return 0;}else {cout << "在该链表中的第" << j << "个元素等于"<<obj<<"\n";return j;}}int Linklist::ListLength() {                //计算链表长度Node *temp;temp = Head;int j = 0;while (temp) {temp = temp->next;j++;}cout << "该链表的长度为:" << j-1<<"\n";return j;}void Linklist::Display(){Node *temp;temp = Head->next;int e;cout << "该链表的遍历依次为:";while (temp) {e = temp->data;cout << e << " ";temp = temp->next;}cout << "\n";  }
3.测试主函数如下:


void main() {   //测试小程序int user_num;cout << "请输入链表的长度:";cin >> user_num;Linklist list1;Linklist list2;list1.CreatList1(user_num);  //头插入法依次插入元素cout << "头插入法创造的链表\n";list1.Display();     list1.Insert(2, 99);list1.Display();list1.GetData(2);list1.Search(11);list1.Search(99);list1.Delete(3);list1.Display();list1.ListLength();list2.CreatList2(4);list2.Display();}
测试结果如下图:



原创粉丝点击