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

#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 ;
}

时间: 2024-11-05 18:55:25

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

华南理工数据结构大作业第二题 二叉树各种操作深度结点个数后序前序中序层次求祖先

/*#include<iostream> #include<windows.h> using namespace std ; struct BTNode { char data ; BTNode *left ; BTNode *right ; BTNode () { left = NULL ; right = NULL ; } } ; int main () { cout <<"题目所给的二叉树用括号表示法后表示为:A(B(D,E(H(J,K(L,M(,N))

机电传动控制大作业第一阶段

机电传动控制大作业第一阶段 一.系统硬件接口定义 系统硬件可分为显示部分.按键输入部分和运动控制部分. 显示部分包括每个楼层的电梯外的楼层显示LED和上下楼指示箭头.电梯内的楼层显示LED和上下楼箭头,LED显示如果用七段共阴数码管则每个LED需要七个继电器来控制显示字符,上下楼箭头每个需要两个继电器IO进行控制,而控制它们的信号源则来自每层楼的行程开关,共七个开关进行输入. 按键输入部分为电梯内和楼层中,电梯内七个常开触点输入楼层,两个常开触点控制开关门,同时需要点亮楼层按键上的指示灯,则需要

机电传动控制大作业 第一阶段

机电传动控制大作业 第一阶段 一.系统硬件接口定义 1.电梯内操作界面: 标有1-7数字的按钮(每个按钮有一个LED灯,按下按钮灯即亮),开门,关门以及紧急报警的按钮和楼层指示的LED数码管.电梯门的打开和关闭需要两个行程开关,接收到开关门的信息可以直接控制门的开关. 2.楼栋操作界面: 2-6层有上行和下行按钮,1层只有上行,7层只有下行.每个按钮都连接一个LED灯(按下按钮灯即亮).两个LED数码管显示所在的楼层. 3.动力相关硬件: 每部电梯配有一台交流异步变频电机和变频器,电机接口接电机

单链表的创建算法

单链表的创建算法 当一个序列中只含有指向它的后继结点的链接时,就称该链表为单链表. 单链表的示意图如下: Head指针为单链表的头指针,单链表L:L既是单链表的名字,也是其头指针.链表中的最后一个结点的指针域定义为空指针(NULL). 单链表的定义: struct Node { ElemType data; struct Node *next; }; typedef struct Node LNode; typedef struct Node *LinkedList; 单链表有带头结点和不带头结

单链表 初始化 创建 头插法 尾插法 插入 删除 查找 合并 长度

#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR -1 #define TRUE 1 #define FALSE -1 #define NULL 0 #define OVERFLOW -2 #define ElemType int #define Status int typedef int ElemType typedef int Status #define LEN sizeof(LNode) #

单链表删除节点

单链表删除节点 node *del(node *head, int num) { node *p1, *p2; p1 = head; while (num != p1->data && p1->next != NULL) { p2 = p1; p1 = p1->next; } if (num == p1->data) { if (p1 == head) head = p1->next; else p2->next = p1->next; free(

数据结构大作业代写

[题目]Given a set of files, of which the sizes will not exceed 10 Gigabytes, find out whether an input string appears or not.Your program is judged based on correctness and searching time.Your program is allowed some preparation time no longer than one

数据结构:线性表之单链表

线性表(亦作顺序表)是最基本.最简单.也是最常用的一种数据结构.线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的.线性表有两种存储结构: ①顺序存储结构,即存储单元在一段连续的地址上存储,常见的数组就是顺序存储结构的线性表: ②链式存储结构,即存储单元在不连续的地址上存储.因为其不连续性,除了要存数据元素信息(数据域)外,还要存储它后继元素(结点)的地址(指针域,链).学习链式结构最好将结点结构牢记于心,如下图: 链表的每个结点只含有一个指

数据结构复习---顺序表和单链表

1.前言: 最近比较浮躁,想学习一门新的技术却总是浅尝辄止,遇到不懂的地方就想跳过去,时间长了,心态就有点崩了.静下心来,去喝了几碗心灵鸡汤.鸡汤博主感动到了我:"无专注,无风景.不要太贪心,一次只做一件事,而且只做最重要的事.".于是乎,我把家里翻了个底朝天,找到了我垫在床底下的<数据结构>这本书,觉得自己是时候静下心来好好复习一下基础了.今天刚看到顺序表和链表,把我的学习心得记录在这里.也希望自己能坚持,老老实实的把这本书复习完. 2.数据结构的重要性: 讲一门知识之前