比较坑爹的基础啊,大把时间浪费在构造函数上,构造函数(出生决定命运!)。
自己解决的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(); }运行截图:
原文链接:https://www.f2er.com/datastructure/383123.html