C++ 单链表基本操作

来源:互联网 发布:怎么快速提升淘宝星级 编辑:程序博客网 时间:2024/04/25 23:27

一:目的

用C++实现单链表的基本操作;

一:实现

1. 首先定义单链表的结构和类,书写在LinkList.h中

# include <iostream># include <string>using namespace std;//定义节点的valuestruct Info{string name;//姓名int id;//学号Info(string info_name, int info_id):name(info_name),id(info_id){}};//定义节点struct Node{Info val;//节点的值Node * p_next;//指向下一个节点Node(Info input):val(input),p_next(NULL){};};class LinkList{public:LinkList();       //构造函数~LinkList();  //析构函数void InsertHead(Info val);//从头节点插入void Insert(Info val, int pos);//插入void Remove(Info val);//删除节点void Reverse();//翻转链表int Find(Info val);//查找位置int Get_Length();//获取长度void Print();//打印链表private:Node *head;//头节点int length;//链表长度};
2. 在LinkList中进行实现

# include "LinkList.h"//构造函数,进行初始化LinkList::LinkList(){head = NULL;//将头结点指向空指针length = 0;}//析构函数,进行释放LinkList::~LinkList(){Node * p;for(int i = 0;i<length; i ++){p = head;//将指针指向头结点head = head->p_next;//将头结点指针指向下一个delete p;}}//获取长度int LinkList::Get_Length(){return length;}//打印链表void LinkList::Print(){if(head == NULL){cout << "空指针" << endl;return;}Node *p = head;while(p!=NULL){cout << "Id:" << p->val.id << ";Name" << p->val.name << endl;p = p->p_next;}}//从头部插入节点void LinkList::InsertHead(Info val){Node *node = new Node(val);     //新建节点node->p_next = head;head = node;length++;}//插入void LinkList::Insert(Info val, int pos){if(pos<0 || pos>length){cout<<"插入位置不能小于0;不能大于链表长度"<<endl;          return;  }int index = 1;Node * temp = new Node(val);Node * p = head;while(index < pos && p!=NULL){p = p->p_next;index++;}if(p == NULL){cout<<"插入失败"<<endl;return;}temp->p_next = p->p_next;p->p_next = temp;length++;}//查找节点int LinkList::Find(Info val){Node * p = head;int pos = 0;while(p!=NULL){if(p->val.id == val.id && p->val.name == val.name)return pos;p=p->p_next;pos++;}return -1;}//移除节点void LinkList::Remove(Info val){Node * p = head;if(p->val.id == val.id && p->val.name == val.name){head = p->p_next;delete p;length--;return;}Node *p_pre = p;p=p->p_next;while(p!=NULL){if(p->val.id == val.id && p->val.name == val.name){p_pre->p_next = p->p_next;delete p;length--;return;}p_pre=p_pre->p_next;p=p->p_next;}}//翻转链表void LinkList :: Reverse(){if(head == NULL)return;Node *p = head;Node *p_next = p->p_next;Node * temp = NULL;while(p_next!=NULL){temp = p_next->p_next;p_next->p_next = p;p= p_next;p_next = temp;}head->p_next = NULL;head = p;}
3. 简单的测试

LinkList linklist;Info val1("赵一",1), val2("王二",2),val3("张三",3),val4("李四",4);Info val5("赵五",5), val6("王六",6),val7("张七",7),val8("李八",8);linklist.InsertHead(val1);linklist.InsertHead(val2);linklist.InsertHead(val3);linklist.InsertHead(val4);linklist.InsertHead(val5);linklist.InsertHead(val6);linklist.InsertHead(val7);linklist.InsertHead(val8);int pos = linklist.Find(val3);linklist.Print();linklist.Remove(val3);cout<<"==========================="<<endl;linklist.Print();linklist.Reverse();cout<<"==========================="<<endl;linklist.Print();system("pause");








原创粉丝点击