当前位置: 代码迷 >> 综合 >> 数据结构严蔚敏全部代码(详细到书中每一个ADT及算法段以及入门演示代码)从2020国庆开始天天更新至完成 COVER BY:数据结构算法实现及解析 (修改版可直接运行文件)
  详细解决方案

数据结构严蔚敏全部代码(详细到书中每一个ADT及算法段以及入门演示代码)从2020国庆开始天天更新至完成 COVER BY:数据结构算法实现及解析 (修改版可直接运行文件)

热度:92   发布时间:2024-02-24 10:44:06.0

代码目录

  • 第一章 绪论
    • 三元组的实现
      • c1.h 万能头文件
      • c1-1.h
      • bo1-1.cpp
      • main1-1.cpp
    • 区分引用类型和非引用类型(注:必须保存为c++后缀即:.cpp)
      • algo1-3.cpp
    • exit的作用
      • algo1-4.cpp
    • 记录程序运行时间
  • 第二章 线性表
  • 第三章 栈和队列
  • 第四章 串
  • 第五章 数组和广义表
  • 第六章 树和二叉树
  • 第七章 图
  • 第八章 动态存储管理
  • 第九章 查找
  • 第十章 内部排序
  • 第十一章 外部排序
  • 第十二章 文件

第一章 绪论

三元组的实现

c1.h 万能头文件

#include<string.h>
#include<ctype.h>
#include<malloc.h>
#include<limits.h>
#include<stdio.h>
#include<stdlib.h>
#include<io.h>
#include<math.h>
#include<process.h>
#include<iostream>
using namespace std;#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1typedef int Status;//函数返回类型
typedef int Boolean;//布尔类型
typedef int ElemType;

c1-1.h

typedef ELemType *Tripelet;

bo1-1.cpp

#include "c1.h"
#include "c1-1.h"Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3)
{
    if(!(T=(ElemType *)malloc(3*sizeof(ElemType))))exit(OVERFLOW);T[0]=v1,T[1]=v2,T[2]=v3;return OK;
}
Status DestroyTriplet(Triplet &T)
{
    free(T);T=NULL;return OK;
}
Status Get(Triplet T,ElemType &e,int i)
{
    if(i<1||i>2)return ERROR;e=T[i-1];return OK;
}
Status Put(Triplet &T,ElemType e,int i)
{
    if(i<1||i>2)return ERROR;T[i-1]=e;return OK;
}
Status IsAscending(Triplet T)
{
    return T[0]<T[1]&&T[1]<T[2];
}
Status IsDecending(Triplet T)
{
    return T[0]>T[1]&&T[1]>T[2];
}
Status Max(Triplet T,ElemType &e)
{
    e=T[0]>T[1]?T[0]>T[2]?T[0]:T[2]:T[1]>T[2]?T[1]:T[2];return OK;
}
Status Min(Triplet T,ElemType &e)
{
    e=T[0]<T[1]?T[0]<T[2]?T[0]:T[2]:T[1]<T[2]?T[1]:T[2];return OK;
}

main1-1.cpp

#include"c1.h"
#include"c1-1.h"
#include"bo1-1.cpp"int main()
{
    Triplet T;ElemType m;Status i;i=InitTriplet(T,5,7,9);printf("调用初始化函数后,i=%d(1:成功) T的3个值为",i);cout<<T[0]<<' '<<T[1]<<' '<<T[2]<<endl;int j=2;i=Get(T,j,m);if(i==OK){
    cout<<"T的第二个值为"<<m<<endl;}i=Put(T,2,6);if(i==OK)cout<<"将T的第2个值改为6后,T的3个值为 "<<T[0]<<' '<<T[1]<<' '<<T[2]<<endl;i=IsAscending(T);printf("调用升序函数后,是否成功? %d\n",i);i=IsDecending(T);printf("是否为降序?%d\n",i);j=Max(T,m);printf("最大值为:%d\n",m);j=Min(T,m);printf("最小值为:%d\n",m);i=DestroyTriplet(T);if(i)printf("成功销毁");else{
    printf("未能成功销毁");}return 0;
}

区分引用类型和非引用类型(注:必须保存为c++后缀即:.cpp)

algo1-3.cpp

#include<stdio.h>
void fa(int a)
{
    a++;printf("在函数fa中:a=%d\n",a);
}
void fb(int &a)
{
    a++;printf("在函数fb中:a=%d\n",a);
}
int main()
{
    int n=1;printf("在主程序中,调用函数fa之前:n=%d\n",n);fa(n);printf("在主程序中,调用函数fa之后,fb之前:n=%d\n",n);fb(n);printf("在主程序中,调用函数fb之后:n=%d\n",n);return 0;
}

exit的作用

algo1-4.cpp

#include"c1.h"int a(int i)
{
    if(i==1){
    printf("退出程序的运行\n");exit(0);//里面的值0代表正常退出运行,值为1则代表异常退出运行}return i;
}int main()
{
    int i;printf("请输入i: ");scanf("%d",&i);printf("a(i)=%d\n",a(i));return 0;
}

记录程序运行时间

一般的方法是使用time.h头文件中的clock()函数

#include<stdio.h>
#include<time.h>
int main()
{
    clock_t begin,end;begin = clock();for(int i=0;i<100000000;++i);//可替换为待检测的程序end = clock();printf("%lf",(double)(end-begin)/CLOCKS_PER_SEC);return 0;
}

另一种方法是调用sys/timb.h头文件

#include<stdio.h>
#include<sys/timeb.h>
int main()
{
    timeb t1,t2;long t;ftime(&t1);for(int i=1;i<1000000000;++i);ftime(&t2);t=(t2.time-t1.time)*1000+(t2.millitm-t1.millitm);printf("用时%ld毫秒\n",t);return 0;
}

第二章 线性表

第三章 栈和队列

第四章 串

第五章 数组和广义表

第六章 树和二叉树

第七章 图

第八章 动态存储管理

第九章 查找

第十章 内部排序

第十一章 外部排序

第十二章 文件