目录
一种扩展数据类型,是若干相关数据项的集合
定义的结构式:
struct 结构名{
成员表
};
struct {
double x;
double y;
}point1;
point1.x=1;
point1.y=2;
//结构名和变量名相同,以这种方式定义新类型,这种类型只能使用一次
struct point{
double x;
double y;
}point1;
point1.x=1;
point1.y=2;
//可再定义point 类型的变量
初始化:
struct Date {
int year,month,day;
} date={2000,12,1};
//结构体变量定义的同时初始化,使用{}
结构体数组:
结构体成员为指针
struct Student
{
char *name;
char *no=new char[80];
double score;
}stud;
stud.name=new char[80]); //需要分配空间,内外均可
结构体和指针:
//指向结构体变量的指针
struct point {
int x,y;
};
point point1={10,10}, *ptr;
ptr=&point1;
(*ptr).x=20; (*ptr).y=20;
ptr->x=30; ptr->y=30;
结构体中“ . ”和“ -> ”的比较分析:
相同点:两个操作符都是二元操作符,且其有操作符是结构体成员的名称。
不同点:“ . ”操作符左边的操作数是一个“结构体”的表达式,而“ -> ”操作符左边的操作数是一个指向结构体的指针。
定义的结构体变量,则访问数据时用".";
定义的结构体指针,则访问数据时用"->";
#include <iostream>
using namespace std;
struct student
{
char name;
int num;
int score;
};
int main()
{
student A;
student *B;
//*B=A;
A.name='a';
A.num=1;
A.score=99;
//错误输出:
cout<<A.name<<A->num<<A.score<<endl;
/* error: base operand of '->' has non-pointer type 'student'
定义的是结构体变量A,访问使用“.” */
cout<<B->name<<B->num<<B.score<<endl;
/* error: request for member 'score' in 'B', which is of pointer type 'student*' (maybe
you meant to use '->' ?)
定义的是结构体指针B,访问使用“->” */
//正确输出:
cout<<A.name<<A.num<<A.score<<endl;
cout<<B->name<<B->num<<B->score<<endl;
}
void change(student s,int eng) //不能修改s
void change(student *s,int eng) //可以修改s
void change(student &s,int eng) //可以修改s
动态链表的建立:
一个一个开辟新结点,输入结点数据,新结点连入链表的过程。
创建新链表:
struct Node
{
int data;
Node* next;
};
//创建新链表,新结点不断在尾部插入
Node *create()
{
Node *head,*pnew,*tail;
head=new Node;head->data=0;//head->data记录节点个数
head->next=NULL;tail=head;
int t;
while(cin>>t)
{
pnew=new Node;
pnew->data=t;
pnew->next=NULL;
tail->next=pnew;
tail=pnew;
head->data++;
}
return head;
}
建立新节点:
Node *pnew=new Node; //分配空间
pnew->data=2; //给数据域赋值
pnew->next=NULL; //给指针域赋值
插入新节点:
int insert(Node *head,int index, int val)
节点删除:Node* del(Node* head, int index)
销毁链表:void distory(Node *head)
查找节点:int search(Node *head, int val)