数据结构算法实现
实现了高一凡的<<数据结构>>,书中的代码是基于VC6++ c++语言实现的,网上也可以找到TC版的c语言实现的源代码,TC版的源代码平台是 Turbo C 2.0 ,编译软件相对较早,因此将采用CodeBlock实现数据涉及的算法原理,在代码顺序和头文件声明,和.c文件实现上有一些顺序上的些许调整:
- 动态分配创建顺序表
- 赋值操作
- 插入操作
- 打印表的内容
- 求线性表的长度
- 将所有在线性表Lb中但不在La中的数据元素插入到La中
- **
c1.h
可以看做是一个总的用于声明函数类型和定义结构体的头文件,后面大多数实现需要包含c1.h
#include <string.h>
#include <ctype.h>
#include <malloc.h> //malloc()等
#include <limits.h> // INT_MAX等
#include <stdio.h> // EOF(=^Z或F6)
#include <stdlib.h> // atoi()
#include <io.h> // eof()
#include <math.h> //floor(),ceil(),abs()
#include <process.h> // exit()
/* 函数结果状态代码 */
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
// #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行
typedef int Status; //Status是函数的类型,其值是函数结果状态代码
//typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSE
typedef int ElemType;//定义顺序表数据类型为整型
c2_1.h
#ifndef C2_1_H_INCLUDED
#define C2_1_H_INCLUDED
/* c2-1.h 线性表的动态分配顺序存储结构 */
#define LIST_INIT_SIZE 10 //线性表存储空间的初始分配量
#define LIST_INCREMENT 2 // 线性表存储空间的分配增量
typedef struct _sqlist //定义顺序表的结构
{
int *elem; // 存储空间基址
int length; // 当前长度
int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList;
/*下面是顺序表操作得函数声明,定义函数类型,涉及的参数以及返回值*/
Status ListEmpty(SqList L);
int ListLength(SqList L);
Status GetElem(SqList L,ElemType i,ElemType *e);
int LocateElem(SqList L,ElemType e,Status(*compare)(ElemType,ElemType));
Status PriorElem(SqList L,ElemType cur_e,ElemType *pre_e);
Status NextElem(SqList L,ElemType cur_e,ElemType *next_e);
void DestroyList(SqList *L);//销毁熟悉怒表
void ClearList(SqList *L);//清空顺序表
Status ListInsert(SqList *L,int i,ElemType e); //插入元素
Status ListDelete(SqList *L,ElemType i,ElemType *e);//删除元素
void ListTraverse(SqList L,void(*vi)(ElemType*));
Status equal(