1.概述
关键在于理解基本概念和术语,理解其过程的含义。
2.数据结构
数据(data)是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。数据元素(data element)是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
数据对象(data object)是性质相同的数据元素的集合,是数据的一个子集。
数据结构(data structure)又称逻辑结构,是相互之间存在一种或多种特定关系的数据元素的集合。通常有以下四类基本结构:集合、线性结构、树形结构、图状结构或网状结构。
存储结构(物理结构)是数据结构在计算机中的表示(又称映像)。
数据类型(data type)是一个值的集合和定义在这个值集上的一组操作的总称。
抽象数据类型(AbstractData Type)是指一个数学模型以及定义在该模型上的一组操作,可细分为:原子类型、固定聚合类型、可变聚合类型。
3.算法
算法与数据结构密不可分,算法往往是建立在特定数据结构之上的。一个算法有5个重要特性:有穷性、确定性、可行性、输入、输出。
而衡量一个算法是否优秀,则主要从以下几点考虑:正确性,可读性,健壮性,时间复杂度,空间复杂度。
4.其他
5.源码
源码一
/*相关状态码及宏函数列表 */
#ifndef STATUS_H
#define STATUS_H
/*状态码*/
#define TRUE 1 //真
#define FALSE 0 //假
#define YES 1 //是
#define NO 0 //否
#define OK 1 //通过
#define ERROR 0 //错误
#define SUCCESS 1 //成功
#define UNSUCCESS 0 //失败
#define INFEASLIBLE -1 //不可行
#ifndef _MATH_H //系统中已有此状态码定义,要避免冲突
#define OVERFLOW -2 //堆栈上溢
#define UNDERFLOW -3 //堆栈下溢
#endif
/*状态码识别类型*/
typedef int Status;
/*宏函数*/
//函数暂停一段时间
#define Wait(x)\
{\
double _Loop_Num_;\
for(_Loop_Num_=0.01;_Loop_Num_<=100000.0*x;_Loop_Num_+=0.01)\
;\
}//设立一个空循环
//按Enter键继续
#define PressEnter\
{\
fflush(stdin);\
printf("Press Enter...");\
getchar();\
fflush(stdin);\
}
#endif
源码二
#ifndef SCANF_C
#define SCANF_C
#include <stdio.h>
#include <string.h>
#include <stdarg.h> //提供宏va_list、va_start、va_arg、va_end
#include <ctype.h> //提供isprint原型
/*
自定义的数据录入函数,用于从文件fp中读取格式化的输入。
与fscanf不同之处在于此函数只会读取西文字符,对于中文字符,则会跳过。
*/
int Scanf(FILE *fp,char *format,...)
{
int *i;
char *ch,*s;
float *f;
int count,k,len,n;
int tmp;
va_list ap;
len=strlen(format);
va_start(ap,format);
for(count=0,k=2;k<=len;k=k+2)
{
while((tmp=getc(fp))!=EOF) //跳过所有非西文字符
{
if((tmp>=0&&tmp<=127))
{
ungetc(tmp,fp); //遇到首个西文字符,将此细纹字符放入输入流
break;
}
}
if(tmp==EOF)
break;
if((format[k-1]=='c')) //读取字符
{
ch=va_arg(ap,char*);
if(tmp!=EOF)
count+=fscanf(fp,"%c",ch);
}
if((format[k-1]=='d')) //读取整型
{
i=va_arg(ap,int*);
while((tmp=getc(fp))!=EOF)
{
if((tmp>='0'&&tmp<='9')||tmp=='-'||tmp=='+'||tmp=='.')
{
ungetc(tmp,fp);
break;
}
}
if(tmp!=EOF)
count+=fscanf(fp,"%d",i);
}
if(format[k-1]='f') //读取浮点型
{
f=va_arg(ap,float*);
while((tmp=getc(fp)!=EOF))
{
if((tmp>='0'&&tmp<='9')||tmp=='+'||tmp=='.')
{
ungetc(tmp,fp);
break;
}
}
if(tmp!=EOF)
count+=fscanf(fp,"%f",f);
}
if(format[k-1]='s') //读取字符串
{
s=va_arg(ap,char*);
while((tmp=getc(fp))!=EOF&&(!isprint(tmp)||tmp==' '))
;
n=0;
if(!feof(fp))
{
ungetc(tmp,fp);
while((tmp=getc(fp))!=EOF)
{
if(isprint(tmp)&&tmp!=' ')
s[n++]=tmp;
else
break;
}
ungetc(tmp,fp);
}
s[n]='\0';
count++;
}
}
va_end(ap);
return count;
}
#endif