数据结构及算法C语言版。严蔚敏版。VC6运行通过,这个是源代码CPP文件,包含顺序线性表、单链表的插入、删除、查找。包含监视哨查找,折半查找,
直接插入排序,希尔排序,冒泡排序,快速排序,选择排序。里面包含超大量的注释,包括对VC6的语法解释和算法的解释和理解。具体效果可以看 http://download.csdn.net/detail/changechange/8236207 我上次上传的 EXE demo,带输入输出,能与用户交互。在运行的时候会把整个运算的过程都显示出来。摘录代码如下://数据结构 上机第一次 栈应用,转换进制题目。
//请用每一个cpp作为一个项目,不要把多个cpp放到同一个项目中,因为我为每个cpp都定义了main。
//这个教材上没有,只能自己补全了
#include
using namespace std;
//p10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
//下面这行书上没找到,自己补的。
typedef int SElemType;
//p46书上的。
#define STACK_INIT_SIZE 100 //定义最初申请的内存的大小
#define STACKINCREMENT 10 //每一次申请内存不足的时候扩展的大小
typedef struct
{
SElemType *base; //在栈构造之前和销毁之后,base的值为null
SElemType *top; //栈顶指针
int stacksize; //当前已分配的存储空间,以元素为单位
}SqStack; //定义顺序栈别名。
//构造一个空栈S
Status InitStack(SqStack &S)
{
// 参考之前的 List.cpp中队malloc的解释。
S.base=(SElemType *) malloc(STACK_INIT_SIZE * sizeof (SElemType));
if (!S.base)
exit(OVERFLOW); // 存储分配失败
S.top = S.base; //初始时栈顶等于栈低
S.stacksize = STACK_INIT_SIZE; //初始栈容量
return OK;
} //end of InitStack
//插入元素e为新的栈顶元素
Status Push(SqStack &S, SElemType e)
{
if (S.top - S.base >= S.stacksize) // 栈满,追加存储空间
{
S.base = (SElemType *) realloc(S.base, //原栈底指针
(S.stacksize + STACKINCREMENT) * sizeof (SElemType)); //新大小
if (!S.base)
exit(OVERFLOW); // 存储分配失败
//调整栈顶的位置
S.top = S.base + S.stacksize;
//修改栈大小为新的大小
S.stacksize += STACKINCREMENT;
}
//*符号为求值符。
*S.top++ = e; //先把e压入栈顶,S.top再增1指向栈顶元素e的下一个位置
return OK;
} //end of Push
// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
Status Pop(SqStack &S, SElemType &e)
{
if (S.top == S.base) //栈顶=栈底表示空栈,如果空栈,报错
return ERROR;
e = *--S.top; //S.top先减1指向栈顶元素,再取值,赋值给e用于返回。
return OK;
}
//这个书上没有,自己加的
//书上没有,自己写的,用来处理每一个元素的data
Status PrintEach(SElemType e){
cout<
1