计算机基础知识文档格式.docx

上传人:b****3 文档编号:16452689 上传时间:2022-11-23 格式:DOCX 页数:184 大小:1.43MB
下载 相关 举报
计算机基础知识文档格式.docx_第1页
第1页 / 共184页
计算机基础知识文档格式.docx_第2页
第2页 / 共184页
计算机基础知识文档格式.docx_第3页
第3页 / 共184页
计算机基础知识文档格式.docx_第4页
第4页 / 共184页
计算机基础知识文档格式.docx_第5页
第5页 / 共184页
点击查看更多>>
下载资源
资源描述

计算机基础知识文档格式.docx

《计算机基础知识文档格式.docx》由会员分享,可在线阅读,更多相关《计算机基础知识文档格式.docx(184页珍藏版)》请在冰豆网上搜索。

计算机基础知识文档格式.docx

j++){

 

 

num+=arr[j];

if(num<

=t){

count++;

for(intk=c;

k<

k++){

num-=arr[k-c];

num+=arr[k];

}

3.结构体定义的使用

1)structnode

intnum;

structnode*next;

};

此时定义node结构体变量时,必须写成structnode*nod;

2)typedefstructnode

}node;

此时定义node结构体变量时,可以写成node*nod;

同时必须注意后面必须加上冒号,这是一个语句。

二、字符串处理

1.字符串的定义:

1)charstr1[]="

HelloWorld"

;

//通过字符数组来定义字符串"

,其实包含两个存储空间:

1.首先是在栈去分配了一段存储空间,用来存储字符串;

2.同时此常量字符串存储在静态数据区。

2)char*str2 

="

//通过字符指针来定义字符串"

,其也包含两个存储空间:

1.首先是在栈上为指针分配存储空间,用来存放指针变量;

2.同时常量字符串存储在静态数据区。

3)#definestr3"

//通过宏定义来定义字符串"

,等价于str3="

2.字符串的输入:

1)常规字串输入:

采用scanf()函数实现输入操作:

必须要取地址,将字符串存入地址中;

其不能识别空格,tab等按键。

2)带空格的字串输入

采用gets()函数实现输入操作:

可以识别空格和tab等按键;

其变量只要是地址名字即可,不要写成取地址的方式;

由于scanf()输入字符串时默认空格作为结束符,故要输入带有空格的字符串时,采用以下格式:

scanf("

%[^\n]"

str)。

3.字符串的输出:

1)常规字串输出

printf("

%s"

a[i]);

它的输出是从a中第i号字符开始输出,直到字符串结束符'

\0'

输出结束。

2)固定长度字串输出:

须知字串长度,采用循环输出

3)带空格字串输出:

4.字符串作为参数传递:

1)传递的是地址,数组也是一样,传递的是地址;

2)对于结构体变量而言,要操作结构内部变量,必须根据地址来操作;

3)操作数的位数最大为64位,故要实现结构体的单位操作,必须重新编写操作函数。

5.字符串函数的使用:

字符串函数大全见:

附录1:

字符串函数大全

1)将字符串转换成数值;

实现方式一

doubleatoi(intn,char*str)

intlen=n;

doublenum=0;

//定义变量时,一定要初始化

for(inti=0;

i<

len;

i++)

num+=(str[i]-'

0'

)*pow(10.0,--len);

//pow()函数返回的是double型,故num必须定义为double型,或者对pow()函数进行强制类型转换

returnnum;

实现方式二

num=num*10+str[i]-'

问题:

1.为什么要减去'

?

曰:

计算器存储运算时,均采用的是二进制表示,故对于所有的字母和常用符号,必须约定自己的一套编码规则,于是ASCII码应运而生。

而特别是对于数字,ASCII和整型之间相差的数值是48,即一个'

字符。

而对于ASCII和数值其显示结果是没有任何区别的,即对于显示,其采用的二进制数值是一样的,而两者的不同,主要在于应用运算上的不同,此时的值也是不同的。

2.当数值超过double的范围时,即大数怎么处理?

此时只能做简单的显示,如果是要做运算,必须采用字符的形式来重新进行运算法则的编写。

2)将数值转换成字符串

char*itoa(intm,char*a)

inti;

while(m>

0)

a[i++]=m%10+'

m/=10;

returna;

charb[11]="

0123456789"

inti=0;

%d"

&

m);

a[i++]=b[m%10];

6.字符串数组的操作

在C++中string可以直接当做变量来处理;

可以通过newstring[n]来申请器长度;

3>

对于string字符串的传递可以跟变量的传递一样操作;

4>

具体实现如下:

intstringPrint(intnum,conststringstr[])

for(inti=0;

num;

cout<

<

str[i]<

endl;

return0;

intmian(void)

string*p;

cin>

>

p=newstring[num];

p[i];

stringPrint(num,p);

delete[]p;

//对于申请的连续地址空间释放时一定要注意

三、数据结构

1.数组

1)数组定义:

数组定义时,必须指定大小,从而编译器为其分配固定大小的内存空间,内存连续分配;

2)数组初始化:

最好为其初始化,如果没有初始化,其会保存垃圾数据;

3)数组的输入:

数组实现数据输入时,一般采用循环输入;

4)数组的输出:

输出一般也采用循环输出;

5)数组作为参数传递:

数组做参数,无法按值传递。

这是由C/C++函数的实现机制决定的。

传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址,因此对其进行操作时,可以对数组值进行修改。

所以为了避免数组值的修改,应该使用const固定。

下面三种函数声明完全等同:

voidfunc(constintarray[10])

voidfunc(constintarray[])

voidfunc(constint*array)

2.链表

1)定义:

一种物理存储单元上非连续、非顺序的存储结构。

2)优势:

不定长,可以根据数据存储需要,不断添加和删除;

存储空间不用连续。

3)链表的一般操作:

1)链表的创建:

a.创建一个新节点node

nod=(node*)malloc(sizeof(node));

nod->

val=val;

next=NULL;

/*判断内存分配是否为空*/

if(nod==NULL)

b.头指针head,用于对单向链表的遍历,该地址指向链表的头部

if(head=NULL)

head=nod;

c.位置指针p,保存指针位置

p->

next=nod;

p=nod;

2)链表的插入:

a.对于单向链表,先从头开始遍历,找到要操作节点的前一个节点

node*listInsert(node*head,intk)

inti=2;

node*p=NULL;

node*nod=NULL;

p=head;

/*输入查询节点数必须大于0*/

if(k<

1)

returnNULL;

/*当输入为1时,查询的是头节点*/

if(k==1)

next=p;

returnhead;

while(p!

=NULL&

k)

p=p->

next;

next=p->

p-next=nod;

3)链表的删除:

node*listDelete(node*head,intk)

node*q=NULL;

head=nod->

free(p);

/*开始查询要删除的节点的前一个节点*/

q=p->

next=q->

free(q);

4)链表的打印:

intlistPrint(node*head)

while(head!

=NULL)

%x--%d"

head,head->

val);

head=head->

5)链表的逆序打印

递归实现

intprintList1(Node*head)

if(head!

=NULL)

if(head->

next!

printList1(head->

next);

head->

val<

"

--0x"

<

head<

堆栈实现

intprintList2(Node*head)

stack<

Node*>

st;

while(head!

st.push(head);

head=head->

while(!

st.empty())

st.top()->

st.top()<

st.pop();

6)链表的逆序实现

Node*ReverseLink(Node*head)

Node*prev=NULL;

Node*next;

next=head->

head->

next=prev;

prev=head;

head=next;

returnprev;

4.要及时释放内存空间,malloc()和free()两个函数要配合使用。

3.栈

先进后出,限定只能在表的一端进行插入和删除操作的线性表;

2)线性表分类:

顺序线性表(也就是用数组实现的,在内存中顺序排列,通过改变数组序号来实现压栈和出栈)

a.定义一个结构体,保存栈的基本信息

typedefstructsqStack

intsize;

int*sp;

int*top;

}sqStack;

b.栈初始化,定义栈的大小和指针

intstackInit(sqStacks)

s->

top=(int*)malloc(sizeof(int)*n);

sp=s->

top;

c.压栈

intpush(sqStack*s,intval)

sp++;

d.出栈

intpop(sqStack*s)

intval=0;

sp--;

val=s->

val;

returnval;

链表(主要是对链表表头进行操作)

a.定义一个结构体,作为栈的节点

intval;

structsqStack*next;

b.栈初始化

sqStack*stackInit()

sqStack*s;

returns;

sqStack*push(sqStack*s,intval)

sqStack*nod=NULL;

nod=(sqStack*)malloc(sizeof(sqStack));

next=s;

s=nod;

sqStack*pop(sqStack*s)

nod=s;

s=s->

free(nod);

栈的实现:

可以采用两种方式,可以分别采用顺序表或者链表实现。

应用:

a.四则运算

b.符号检测

4.队列

先进先出,限定只能在表的一端进行插入和在另一端进行删除操作的线性表;

2)队列的实现:

3)应用:

5.二叉树

1)基本概念:

定义:

每个结点最多有两棵子树,左子树和右子树,次序不可以颠倒

性质:

a.非空二叉树的第n层上至多有2^(n-1)个元素

b.深度为h的二叉树至多有2^h-1个结点

其他概念:

a.满二叉树:

b.完全二叉树:

2)存储结构

顺序存储:

将数据结构存在一块固定的数组中

#defineLENGTH100 

typedefchardatatype;

typedefstructnode

datatypedata;

intlchild,rchild;

intparent;

}Node;

Nodetree[LENGTH];

intlength;

introot;

链式存储:

typedefstructBinNode

structBinNode*lchild;

structBinNode*rchild;

}BinNode;

typedefBinNode*bintree;

//bintree本身是个指向结点的指针 

3)二叉树的遍历

前序遍历:

根节点->

左子树->

右子树

中序遍历:

后序遍历:

右子树->

根节点

4)遍历的实现

二叉树的创建

a.创建二叉树节点

typedefstructBiTree

charchr;

structBiTree*lchild;

structBiTree*rchild;

}BiTree;

b.创建二叉树

BiTree*CreateBiTree()

BiTree*T=NULL;

%c"

chr);

if(chr!

='

'

T=(BiTree*)malloc(sizeof(BiTree));

if(T==NULL)

Memoryisfailed!

\n"

);

T->

chr=chr;

lchild=CreateBiTree();

rchild=CreateBiTree();

returnT;

前序遍历

intpreOlderTraverse(BiTree*T)

if(T)

T->

preOlderTraverse(T->

lchild);

rchild);

中序遍历

intinOlderTraverse(BiTree*T)

inOlderTraverse(T->

后序遍历

intpostOlderTraverse(BiTree*T)

postOlderTraverse(T->

非递归实现

创建堆栈

a.创建节点

BiTree*Bt;

structsqStack*sp;

b.push()函数实现

intpush(sqStack**S,BiTree*Bt)

sqStack*Stack=NULL;

Stack=(sqStack*)malloc(sizeof(sqStack));

if(Stack==NULL)

Stack->

Bt=Bt;

Bt->

lchild=Bt->

lchild;

rchild=Bt->

rchild;

sp=(*S);

(*S)=Stack;

c.pop()函数实现

BiTree*pop(sqStack**S)

BiTree*Bt=NULL;

Bt=(*S)->

Bt;

Stack=(*S);

(*S)=(*S)->

sp;

free(Stack);

returnBt;

#'

Memroyisfailed!

intpreOlderVisitBiTree(sqStack*S,BiTree*T)

if(!

T)

TheBiTreeisempty!

while(T||S)

while(T)

push(&

S,T);

T=T->

T=pop(&

S);

intinOlderVisitBiTree(sqStack*S,BiTree*T)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1