1.仅采用循环
发挥了计算机的计算优势,
但没有发挥计算机的存储优势
例题2 逆序输出
输入3个整数,逆序输出到1行种
样例输入:
33 26 77
样例输出:
77 26 33
思考:如果有100个整数呢?
2.数组
作用
将一组具有相同属性的数据集成到一起
定义
类型名 数组名[数组元素个数];
3.下标变量(数组元素)的关键与难点
2个可变量
下标变量的下标
下标变量的数值
4.注意
NOI中常常难以准确地计算出所需数组的大小
数组一般会声明的稍大一些,在空间够用的前提下,浪费点不会有很大影响
比较大的数组应尽量声明在main()函数外,否则程序可能无法运行
为使数组尽可能大,应尽量使用占用内存较小的基类型
5.使用技巧
memset(a,0,sizeof(a)); //数组初始化
memcpy(b,a,sizeof(b)); //数组整体赋值
需要头文件:<cstring>
用户自定义的数据类型
是一个可以包含不同数据类型的结构
定义方法
struct <类型名>
{
类型名1 变量名1;
类型名2 变量名2;
……
};
结构体型变量的访问
使用 “.” 操作符
应用举例
struct student
{
char name[8];
int math;
} st1;
st1.name=”张三”;
cin >>st1.math;
cout <<st1.name;
计算机内存单元
内存单元的地址
内存单元的内容
指针变量
在其中存储内存的地址
定义方法
类型名* 指针变量名;
运算符
取地址:&
取内容:*
例如
int *p1;
int a;
a=10;
p1=&a; //将整型变量a的内存单元地址赋给指针变量p1
cout <<a; //输出整型变量a的值,结果为10
cout <<p1; //输出指针变量p1的值,结果为整型变量a
的地址
cout <<*p1; //输出指针变量p1所指内存单元的内容,
结果为整型变量a的值,结果为10
单链表(以单个整数为例)
struct node
{
int data;
node *next;
};
node *head;
Node *p;
p=new node;
p->data=10;
p->next=NULL;
循环链表
单链表中最后一个元素的next指向链表的第一元素
双向链表(以单个整数为例)
struct node
{
int data;
node *pre,*next;
};
node *head;
Node *p;
p=new node;
p->data=10;
P->pre=NULL ; p->next=NULL;
双向循环链表
双向链表中最后一个元素的next指向链表的第一元素
双向链表中第一个元素的pre指向链表的最后一元素