c++实现 单链表
2015-05-27 21:29
204 查看
Main.cpp #include<iostream> #include"LinkNode.h" using namespace std; int main() { LinkList l; LinkList::LinkList(); LinkNode n; l.HeadInsert(n.ProduceNode()); l.HeadInsert(n.ProduceNode()); l.HeadInsert(n.ProduceNode()); l.HeadInsert(n.ProduceNode()); cout<<l.Length()<<endl; l.Insert(3,n.ProduceNode()); l.Output(); cout<<l.Find(1)<<endl; cout<<l.Search(33)<<endl; l.Delete(2); l.Output(); return 0; }
LinkNode.h //#ifndef LinkNode_H //#define LinkNode_H #pragma once typedef class LinkNode { friend class LinkList; //友元类:LinkList类中所有函数成员都能访问LinkNode类中的数据成员 public: LinkNode* ProduceNode();//产生一个节点 private: int data; LinkNode *pnext; }LN,*PLN; class LinkList { public: LinkList(); ~LinkList(); void HeadInsert(PLN) const; bool IsEmpty() const; int Length() const; int Find(int k) const; int Search(const int x) const; void Delete(int k); void Insert(int k, PLN); void Output() const; private: LinkNode *phead; /* 头节点 */ }; //#endif
LinkNode.cpp #include "LinkNode.h" #include<iostream> using namespace std; //产生一个节点 PLN LinkNode::ProduceNode() { int val; cout<<"输入节点数据:"; cin>>val; PLN p=new LN(); p->data=val; p->pnext=NULL; return p; } //头插 void LinkList::HeadInsert(PLN l) const { l->pnext=phead->pnext; phead->pnext=l; } /* 构造函数 首指针设置为NULL */ LinkList::LinkList() { phead=new LinkNode(); phead->pnext = NULL; } /* 利用析构函数删除链表所有节点,释放内存空间 */ LinkList::~LinkList() { LinkNode *p; while (phead) { p = phead; phead = phead->pnext; delete p; } } /* 链表为空,则返回TRUE,否则返回FALSE */ bool LinkList::IsEmpty() const { if (phead->pnext) /* 首指针不为空则链表非空 */ return false; else return true; } /* 返回链表中元素个数 */ int LinkList::Length() const { int length = 0; LinkNode *p = phead->pnext; while (p) /* 直到最后一个节点 */ { p = p->pnext; length++; } return length; } /* 返回loc位置的元素值 */ int LinkList::Find(int loc) const { if(loc<1||loc>Length()) cout<<"插入位置错误!注意本链表只有"<<Length()<<"节点!"<<endl; else { PLN p=phead->pnext; int i=1; while(i<loc) { ++i; p=p->pnext; } return p->data; } } /*返回L中第1个与x相等的数据元素的位序。若这样的数据元素不存在,则返回值为0 */ int LinkList::Search(const int x) const { LinkNode *p = phead->pnext; int i = 1; while (p) { if (p->data == x) return i; else { p = p->pnext; i++; } } if(!p) return 0; } /* 插入到第k个节点之后 */ void LinkList::Insert(int loc, PLN x) { if(loc<1||loc>Length()) cout<<"插入位置错误!注意本链表只有"<<Length()<<"节点!"<<endl; else { PLN p=phead; int i=1; while(i<loc) { ++i; p=p->pnext; } x->pnext=p->pnext; p->pnext=x; } } /* 删除第k个节点 */ void LinkList::Delete(int k) { if(k<1||k>Length()) cout<<"错误!注意本链表只有"<<Length()<<"节点!"<<endl; else if(IsEmpty()) cout<<"链表为空,无法删除!!"<<endl; else { PLN p=phead; while(--k) //采用--k,获取指向第k-1个节点的指针 p=p->pnext; PLN q=p->pnext; p->pnext=p->pnext->pnext; delete(q); } } /* 输出所有节点信息 */ void LinkList::Output() const { LinkNode *p = phead->pnext; while (p) { cout <<p->data << " "; p = p->pnext; } cout<<endl; }
相关文章推荐
- 单链表c++简单模板实现
- 单链表(C++实现)
- 单链表基础操作C++实现
- 单链表的c++实现(参考浙大数据结构公开课)
- C++中用模板类(结点类,链表类)实现的单链表的合并操作!
- 数据结构单链表的各种操作C++实现
- 单链表c++简单模板实现
- 单链表的逆置-C++实现
- 用c++实现 c++单链表的实现(采用模板类)
- 单链表的逆置-C++实现
- 单链表C++实现
- 线性表之单链表的c++实现
- C++实现单链表操作
- 单链表基础操作C++实现
- 用C++实现单链表的创建、逆置和输出 的两种方法
- 单链表的C++实现
- 单链表的逆置-C++实现
- C++实现单链表
- C++ 单链表实现
- C++模版编程——单链表的实现