码迷,mamicode.com
首页 > 其他好文 > 详细

华南理工数据结构大作业第一题单链表 删除创建等各种简易操作

时间:2014-12-10 14:20:21      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:华南理工   单链表   对象   陈军   链表   

#include<iostream>
#include<windows.h>
#include<string>
/*   (1)  初始化单链表h;
      (2)   依次插入5个元素:{“张三” , 85}, {“李四” , 95},
              {“王五” , 75}, {“陈军” , 80}, {“程涛" , 90}
      (3)   输出单链表h的内容;
      (4)   输出单链表的长度;
      (5)   输出单链表h的第3个元素;
      (6)   输入一个姓名(如:陈军),在单链表中查找该元素,输出该元素的编号;
      (7)   删除第4个元素,并输出被删除元素的内容;
      (8)   输出单链表h的内容;
      (9)   释放单链表h。
      注意:
      每个过程要显示出各种提示信息。如:要求输出单链表的长度,则要显示:当前单链表的长度为:5.
*/
using namespace std ;
struct   Student{
	string  name;
    int   score;
} ;
typedef   Student  ElemType ;
struct  LinkList{
	ElemType data ;
    LinkList  * link  ;
	LinkList( LinkList  *ptr = NULL ){ link  = ptr ;}

} ;

	//重载写这里
istream &operator>>(istream &is,ElemType &c){
	is >> c.name>>c.score  ;
    return is ;
}
ostream &operator<<(ostream &os,ElemType &c){
	os << c.name<< c.score ;
    return os ;
}
void print(LinkList *first){
	LinkList *cur = first ;
	cur = cur -> link;
		 while (cur != NULL ){ 
			 cout <<cur->data <<endl ; 
			 cur = cur ->link ;			
		 }
}//代码有误
//出现的问题在于,first的link是空的,没有接着连接下去 
void printlen(LinkList *first){
					int length  = 0 ;
					if(first->link == NULL) {
						cout <<"fuckashole"<<endl ;
					}
					while (first != NULL){//cout<<cur->dat<<endl;
						length++ ;
						first =first->link	 ;
					}  
					cout <<"链表的长度为 : "<< length-1 <<endl;
}
LinkList *Locate (LinkList *first ,int w_place ) {	//	定位函数,插入与删除时用来确定某一位置
			int k = 0 ;
			LinkList  *cur = first  ;
			while( k != w_place ) {
				cur = cur->link ;
				k++;
			}
			return cur ;
}
void LocPri (LinkList *&first ) {
	cout <<"请输入您想输出的位置 : ";
	int lp_number ;
	cin >> lp_number ;
	Locate (first ,lp_number ) ;
	cout <<Locate (first ,lp_number )  ->data <<endl;
}
void create(LinkList  *&first ,int n){	//n就是第一个结点的
					cout<<"请输入对象: "<<endl;
					ElemType  n_data ;
					cin >> n_data ; 
					//first->link = NULL ;
					//first ->data = n_data ;//这边需要用到重载
					LinkList *cur = new LinkList ;
					cur->link =first ->link ;
					first->link = cur ;
					cur->data = n_data ;
					LinkList *f = new LinkList ;
					f = cur;
			for(int i=0 ; i< n - 1 ; i++){
					cout<<"请输入对象: "<<endl;
					ElemType  n_data ;
					cin >> n_data ; 
					//first->link = NULL ;
					//first ->data = n_data ;//这边需要用到重载
					LinkList *cur = new LinkList ;
					cur->link =f ->link ;
					f->link = cur ;
					cur->data = n_data ;
					f = cur ;
					//the wrong part
			//		first = cur ;
			}
		}		
/*void Insert (LinkList *first){
				//cout<<"请输入您想插入的位置 :" ;
				//int place ;
				//cin >> place ;
				LinkList *cur =	Locate(first,place) ;
				LinkList *newNode = new LinkList ;
				cout<<"请输入您想插入的元素的值 :";
				ElemType data ;
				newNode ->link =NULL ;
				cin >> data.name>>data.score ;//还是需要用到重载
				newNode->data = data ; 
				newNode->link = cur->link ;
				cur->link = newNode ;
}*/		
void Delete(LinkList *first){
			cout<<"请输入您想删除的位置 : " ;
			int place ;
			cin >> place ;
			LinkList *cur =Locate (first,place-1  ) ;
			cur->link =cur->link->link ;
		
}
void  Search (LinkList *first, ElemType test) {
		//cout << "请输入您想查找的元素名字 :" ; 
		//ElemType test ;
		//cin >> test ;
		int flag = 0 ;
		int k = 0 ;
	//	if(first->link == NULL) cout <<"Search 的link为空"<<endl;
		while (first != NULL) {
			if(first->data.name == test.name  ) {
					//cout <<" 找到该元素 "<<endl ;
					flag = 1 ;
					k++ ;
					//continue ; 
					break ; 
			}
			else {
				first = first->link ;
				k++ ;				//Search (first , test ) ;
			}
		}
		if(flag == 0 ) {
			cout <<" 没有找到该元素 "<<endl ; 
		}
		if(flag == 1) {
		//	cout <<"找到该元素 "<<endl ;
			cout <<"所找的元素位置是 : "<< k-1<<endl;
		}
}
int main () {
	//cout<<"请输入想插入的元素个数  :" ; 
/*	int w_number  ;
	cin >>w_number ;
	for(int i =0 ;i < w_number ; i++) {
			//插入每一个元素
	}
	*/
	cout <<"请输入您想创建的对象个数 :" ;
	int w_number  ;
	cin >>w_number ;
	LinkList *test = new LinkList  ; 
	test -> link = NULL; //新建的头为空 
   //cout<<"请输入对象: "<<endl;
	//ElemType t_data ;
	//cin>>t_data ;
	//test ->data = t_data ;
	create (test,w_number ) ;


	cout <<endl;
	cout <<endl;
	print(test) ;
	cout << endl;
	printlen(test)  ;
	//查找部分

	 cout <<endl ; 
	LocPri(test) ;	
	cout << "请输入您想查找的元素名字 :" ; 
	ElemType tes ;
	cin >> tes.name ;
	cout <<endl;
	Search (test ,tes  ) ;
	cout <<endl;
	
	Delete(test) ;
	print (test) ;
	cout <<endl ;

	print (test) ;
	system("pause") ;
	return 0 ;
}

华南理工数据结构大作业第一题单链表 删除创建等各种简易操作

标签:华南理工   单链表   对象   陈军   链表   

原文地址:http://blog.csdn.net/hhooong/article/details/41844347

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!