类、结构体、指针、引用

1.类与结构体

类的定义:

class Person
{
	private:
		int age,height;
		double money;
		string books[100];
	public:
		string name;
		void say()
		{
			cout<<"I'm"<<name<<endl;
		}
		void set_age(int age1)
		{
			if(age1>=0 && age<=130)
			{
				age=age1;
			}
		}
		int get_age()
		{
			return age;
		}
		void add_money(double x)
		{
			money+=x;
		}
};

类中的变量和函数被统一称为类的成员变量
private后面的内容是私有成员变量,在类的外部不能访问;public后面的内容是公有成员变量,在类的外部可以访问。
类的使用:

#include<iostream>
#include<string>
using namespace std;
class Person
{
	private:
		int age,height;
		double money;
		string books[100];
	public:
		string name;
		void say()
		{
			cout<<"I'm "<<name<<endl;
		}
		void set_age(int age1)
		{
			if(age1>=0 && age<=130)
			{
				age=age1;
			}
		}
		int get_age()
		{
			return age;
		}
		void add_money(double x)
		{
			money+=x;
		}
}person_a,person_b,persons[100];
int main()
{
	Person c;
	c.name="yxc";		//正确!访问公有变量
	c.age=18			//错误!访问私有变量
	c.set_age(18);		//正确!set_age()是共有成员变量
	c.add_money(100);
	c.say();
	cout<<c.get_age()<<endl;
	return 0;
}

结构体和类的作用是一样的。不同点在于类默认的是private,结构体默认是public。

struct Person
{
	private:
		int age,height;
		double money;
		string books[100];
	public:
		string name;
		void say()
		{
			cout<<"I'm "<<name<<endl;
		}
		void set_age(int age1)
		{
			if(age1>=0 && age<=130)
			{
				age=age1;
			}
		}
		int get_age()
		{
			return age;
		}
		void add_money(double x)
		{
			money+=x;
		}
}person_a,person_b,persons[100];

2.指针和引用

指针:存储变量,地址,的变量

int a=10;
int *p=&a;
cout<<p<<endl;	//输出地址
cout<<*p+10;	//输出a的值

数组名是一种特殊的指针。指针可以做运算:

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

引用与指针类似,相当于给变量起了个别名。

int a=10;
int &b=a;
b+=10;
cout<<a;

3.链表

#include<iostream>
using namespace std;
struct Node{
	int val;
	Node* next;
}*head;
int main(){
	for(int i=1;i<=5;i++){
		Node* p=new Node();
		p->val=i;
		p->next=head;
		head=p;
	}
	for(Node* bl=head;bl;bl=bl->next) cout<<bl->val<<endl;
	return 0;
}

4.删除链表中的元素

void Delete(int n){
	Node* temp1=head;
	if(n==1){
		head=head->next;
		delete temp1;
		return;
	}
	else{
		for(int i=1;i<n-1;i++)temp1=temp1->next;
		Node* temp2=temp1->next;
		temp1->next=temp2->next;
		delete temp2;
	}
}

4.链表的插入

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

5.链表的反转

void Fz(){
	Node* prev=NULL;
	Node* curr=head;
	Node* next;
	while(curr){
		next=curr->next;
		curr->next=prev;
		prev=curr;
		curr=next;
	}
	head=prev;
}

7.双向链表的插入

void Insert(int val,int n){
	Node* temp1=new Node();
	temp1->val=val;
	temp1->next=NULL;
	temp1->next=NULL;
	if(n==1){
		temp1->next=head;
		head->prev=temp1;
		head=temp1;
		return;
	}
	Node* temp2=head;
	for(int i=1;i<n-1;i++)temp2=temp2->next;
	if(temp2->next){
		temp1->next=temp2->next;
		temp2->next=temp1;
		temp2->next->prev=temp2;
		temp1->next->prev=temp1;
	}
	else{
		temp2->next=temp1;
		temp1->prev=temp2;
	}
}
posted @ 2024-12-06 19:28  吴小米2013  阅读(33)  评论(0)    收藏  举报