【数据结构】·【带头结点的单链表】
2014-01-25 16:58
381 查看
比较坑爹的基础啊,大把时间浪费在构造函数上,构造函数(出生决定命运!)。
自己解决的bug,感觉还不错。其实程序的核心是算法,算法建立在数据结构的基础之上。
大部分的程序员现在学的基本都是规则,而不是创造。
但掌握了规则,也能创造很多财富。
重新巩固我弱爆了的数据结构,没敲完数据结构的程序员不是好领导。
注释就不写了,可以提问,或者建议。
自己解决的bug,感觉还不错。其实程序的核心是算法,算法建立在数据结构的基础之上。
大部分的程序员现在学的基本都是规则,而不是创造。
但掌握了规则,也能创造很多财富。
重新巩固我弱爆了的数据结构,没敲完数据结构的程序员不是好领导。
注释就不写了,可以提问,或者建议。
#include<iostream> #include<string> #include "stdlib.h" using namespace std; class Student{ public: int id; string name; int score; Student(){} Student(int _id,string _name,int _score){ id=_id; name=_name; score=_score; } friend ostream & operator<<(ostream & os,Student& temp){ os<<"ID:"<<temp.id<<"\tName:"<<temp.name<<"\tScore:"<<temp.score<<endl; return os; } }; template<class T> struct LinkNode{ T data; LinkNode<T> * link; LinkNode(T& item){ data=item; link=NULL; } LinkNode<T>(){} }; template<class T> class List{ public: LinkNode<T> * first; List(){ first=new LinkNode<T>; first->link=NULL; } ~List(){ makeEmpty(); } void makeEmpty(); int Length(); LinkNode<T> *getHead(){ return first; } LinkNode<T> *Search(T x); LinkNode<T> *Locate(int i); bool getData(int i,T& x); void setData(int i,T& x); bool Insert(int i,T& x); bool Remove(int i,T& x); bool IsEmpty(){ return first->link==NULL?true:false; } void output(); }; template<class T> void List<T>::makeEmpty(){ LinkNode<T> *q; while(first->link!=NULL){ q=first->link; first->link=q->link; delete q; } } template<class T> int List<T>::Length(){ LinkNode<T> * p=first->link; int count=0; while(p!=NULL){ p=p->link; count++; } return count; } template<class T> LinkNode<T> *List<T>::Search(T x){ LinkNode<T> * current=first->link; while(current!=NULL){ if(current->data==x) break; else current=current->link; } } template<class T> LinkNode<T> * List<T>::Locate(int i){ if(i<0) return NULL; LinkNode<T> * current =first; int k=0; while(current->link!=NULL&&k<i){ current=current->link; k++; } return current; } template<class T> bool List<T>::getData(int i,T& x){ if(i<0) return NULL; LinkNode<T> * current=Locate(i); if(current==NULL) return false; else{ x=current->data; return true; } } template<class T> void List<T>::setData(int i,T& x){ if(i<0) return; LinkNode<T> *current=Locate(i); if(current==NULL) return; else current->data=x; } template<class T> bool List<T>::Insert(int i,T& x){ LinkNode<T> * current=Locate(i); if(current==NULL) return false; LinkNode<T> *newNode=new LinkNode<T>(x); if(newNode==NULL){ cerr<<"存储分配错误!"<<endl; exit(1); } newNode->link=current->link; current->link=newNode; return true; } template<class T> bool List<T>::Remove(int i,T& x){ LinkNode<T> * current=Locate(i-1); if(current==NULL||current->link==NULL) return false; LinkNode<T> *del=current->link; current->link=del->link; x=del->data; delete del; return true; } template<class T> void List<T>::output(){ LinkNode<T> *current=first->link; while(current!=NULL){ cout<<current->data<<endl; current=current->link; } } void main(){ List<Student> stu; if(stu.IsEmpty()){ cout<<"单链表为空!"<<endl; } int id; string name; int score; int num; cout<<"输入数据个数:"; cin>>num; for(int i=0;i<num;i++){ cout<<"输入学号:"; cin>>id; cout<<"输入姓名:"; cin>>name; cout<<"输入成绩:"; cin>>score; Student student(id,name,score); stu.Insert(i+1,student); } stu.output(); Student student;//用于删除 stu.Remove(2,student); stu.output(); Student s1(123,"biubiu",12); stu.Insert(2,s1); stu.output(); }运行截图:
相关文章推荐
- 数据结构模版----单链表SimpleLinkList[不带头结点&&伪OO](C语言实现)
- 《数据结构》进行曲--带头结点的单循环链表的基本操作
- 单链表带头结点&不带头结点
- 不带头结点的单链表——数据结构课堂作业
- 删除不带头结点的单链表的非尾结点&&逆序打印单链表
- 用C++实现数据结构二 带头结点的单链表
- 数据结构(四)——单链表 、带头结点的单链表、循环链表 及其实现
- 数据结构_不带头结点的链表逆制
- 数据结构-java与c实现带头结点的单链表
- 【C++数据结构学习笔记---线性表】带头结点的双向循环链表
- 数据结构-带头结点带环的双向链表基本操作
- 带头结点的链表&nbsp;排序
- 数据结构:设有一个不带头结点的单链表L,设计两个递归算法,del(L,x)删除单链表L中第一个值为x的节点,delall(L,x)删除单链表L中的最小节点值。
- 数据结构:带头结点的双向循环链表
- PTA(数据结构)-带头结点的单链表就地逆置
- 数据结构 带头结点的单链表 操作大全 最全的链表操作(c++实现)
- 数据结构研究--尾插法创建带头结点的单链表
- 带头结点的单链表——数据结构课堂作业
- 数据结构(二)——单链表 、带头结点的单链表、循环链表 及其实现
- 单链表带头结点&不带头结点