【数据结构】·【带头结点的单链表】
发布时间:2020-12-15 06:31:01 所属栏目:安全 来源:网络整理
导读:比较坑爹的基础啊,大把时间浪费在构造函数上,构造函数(出生决定命运!)。 自己解决的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();
}
运行截图:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
