五,类,结构体,指针,引导

类可以将变量,数组和函数完美的打包在一起

#include<iostream>
using namespace std;

class Person
{
	privste:
		double score;
		
	publie:
		string name;
		int age;
		void say()
		{
			cout<<"人会说话"; 
		}
		void set_score(double cj)
		{
			if(cj>=0 && cj<=100)
				score=cj;
		}
		double get_score()
		{
			return score;
		}
};
int main()
{ 
	Person p1;
	
	return 0;
}

类中的变量和函数同一被称为成员变量

private内容是私有成员变量在类的外面不能访问,后面是内容是公有成员变量在类的外面能访问;

#include<iostream>
using namespace std;
const int N=1000010;

class Person
{
	private:
		int age,height;
		double money;
		string books[100];
	
	publie:
		string name;
		
		void say()
		{
			cout<<"I""m"<<name<<endl;
		}
		
		int set()
		{
			age = a;	
		} 
		
		int get_age()
		{
			return age;
		}
		
		void add_money(double x)
		{
			money+=x;
		}
} person_a,person_b,persons[100];

int main()
{
	persen c;
	
	c.name='yxe';
	c.age=18;
	c.set_age(18);
	c.abb_money(100);
	
	c.say();
	cout<<c.get_age()<<endl;
	
	return 0;
}

结构体和类的作用一样,不同的是类默认的是private

struct person
{
	private:
		int age,height;
		double money;
		string books[100];
		
	publie:
		string name;
		
		void say()
		{
			cout<<"I""m"<<" "; 
		}
		
		int set_age(int a)
		{
			age = a;
		}
		int get_age()
		{
			return age;
		}
		void sdd_money[double x]
		{
			money += x;
		}
}person_a,person_b,person[100];

2.指针和引用

指针是存放变量的值,我们可以用指针来改变变量的值

#include<iostream>
using namespace std;

int main()
{
	int a=6;
	int *z=&a;
	*z+=1;
	cout<<a;
	return 0;
}

数组是一种特殊的指针

#include<iostream>
using namespace std;

int main()
{
	int a[5]={1,2,3,4,5};
	
	for(int i=0;i<5;i++)
		cout<<*(a+i)<<endl;
	return 0;
}

引用和指针相似,是给指针取了一个别名

#include<iostream>
using namespace std;
int main()
{
	int a=10;
	int &p=a;
	p+=5;
	cout<<a<<endl;
	
	return 0;
}

指针和结构体

#include<iostream>
using namespace std;
struct Node
{
	int val;
	Node *next;
};
int main()
{
	Node *p1=new Node();
	p1->val=1;
	Node *p2=new Node();
	p2->val=2;
	
	p1->next =p2;
	
	Node *p3 = new Node();
	p3->val=3;
	
	p2->next =p3;
	
	for(Node *head=p1;head;head=head->next)
	{
		cout<<head->val <<endl;
	}
	
	return 0;
}

链表

#include<iostream>
using namespace std;
struct Node
{
	int avl;
	Node* next;
}*haed;
int main()
{
	for(int i=0;i<3;i++)
	{
		Node *p=new next;   
		p->avl =i;
		p->avl =haed;
		haed=p;
	}
	for(Node* p=haed;p;p=p->avl )
	{
		cout<<p->avl ;
	}
	return 0;
}

删除链的表节点

#include<iostream>
using namespace std;
struct Node
{
	int val;
	Node* next;
}*head;
void Delete(int n)
{
	Node* temp1 = head;
	if(n==1)
	{
		head = temp1->next ;
		double temp1;
		return;
	}
	for(int i=1;i<n-1;i++)
	{
		temp1 = temp1->next;
	}
	Node* temp2 = temp1->next;
	temp1->next = temp2->next;
	delete temp2;
}
int main()
{
	for(int n=1;n<=5;n++)
	{
		Node* p=new Node;
		p->val =n;
		p->next =head;
		head=p;
	}
	Delete(3);
	for(Node* p=head;p;p=p->next )
	{
		cout<<p->val <<" ";
	}
	return 0;
}

链表的插入

#include<iostream>
using namespace std;
struct Node
{
	int val;
	Node *next;
}*head;
void Insert(int val,int n)
{
	Node* temp1 = new Node;
	temp1->val = val;
	temp1->next=nullptr;
	if(n==1)
	{
		temp1->next=head;
		head=temp1;
		return;
	}
	Node* temp2=head;
	for(int i=1;i<n-1;i++)
	{
		temp2=temp2->next;
	}
	temp1->next=temp2->next;
	temp2->next = temp1;
}
int main()
{
	for(int i=1;i<=5;i++)
	{
		Node* p=new Node();
		p->val =i;
		p->next =head;
		head=p;
	}
	
	Insert(55,3)
	for(Node* p=head;p;p=p->next )
	{
		cout<<p->val <<" ";
	}
	return 0;
}

链表的反转

#include<iostream>
using namespace std;
struct Node
{
	int val;
	Node* next;
}*head;
void fz()
{
	Node* prev = NULL;
	Node* curr=head;
	Node* next;
	while(curr!=NULL)
	{
		next = curr->next ;
		curr->next = prev;
		prev = curr;
		curr = next;
		
	}
	head = prev;
}
int main()
{
	for(int i=1;i<=5;i++)
	{
		Node* p = new Node();
		p->val = i;
		p->next = head;
		head = p;
	}
	fz();
	for(Node* p = head;p;p=p->next )
	{
		cout<<p->val<<" ";
	}
	return 0;
}

双向链表

1.建立双向链表

#include<iostream>
using namespace std;
struct Double_Node
{
	int val;
	Double_Node* next;
	Double_Node* prev;
}*head;

int main()
{
	for(int i=1;i<=3;i++)
	{
		Double_Node* p=new Double_Node;
		p->val =i;
		p->next =head;
		head=p;
		if(i!=1)
		{
			head->next->prev=p;
		}
	}
	for(Double_Node*p =head;p;p=p->next )
	{
		cout<<p->val <<" ";
	}
	return 0;
}

2.双向链表的删除

#include<iostream>
using namespace std;
struct Node
{
	int val;
	Node* next;
	Node* syg;
}*head;
void Delete(int n)
{
	Node* temp1=head;
	if(n==1)
	{
		head=temp1->next;
		head->syg = NULL;
		delete temp1;
		return;
	}
	for(int i=1;i<n-1;i++)
	{
		temp1 = temp1->next ;
	}
	Node* temp2 = temp1->next;
	if(temp2->next != NULL)
	{
		temp1->next = temp2->next;
		temp1->next->syg = temp1;
	}
	else
	{
		temp1->next =NULL;
	}
	delete temp2;
	return;
}
int main()
{
	for(int i=1;i<=3;i++)
	{
		Node* p=new Node;
		p->val=i;
		p->next=head;
		head=p;
		if(i!=1)
		{
			p->next->syg=p;
		}
	}
	Delete (3);
	for(Node* p=head;p;p=p->next )
	{
		cout<<p->val <<" ";
	}
	return 0;
}
posted @ 2025-04-19 20:41  jsc2014  阅读(8)  评论(0)    收藏  举报