《数据结构:C++版》课后答案

  • 更新时间:
  • 2547人关注
  • 点击下载

给大家带来的是关于数据结构相关的课后习题答案下载,介绍了关于数据结构、C++方面的内容,由梁曾燕 网友提供,本资源目前已被666人关注,高等院校数据结构类教材综合评分为:7.3分

资源详情相关推荐
《数据结构:C++版》封面
  • 出版社:清华大学出版社
  • 作者:王红梅、胡明、王涛
  • 大小:69.2 KB
  • 类别:数据结构
  • 热度:204
  • 数据结构:用面向对象方法与C++语言描述(第2版)
  • 图解数据结构:使用C++
  • 数据结构与算法分析(C++版/第二版)
  • 数据结构(C++语言版)
  • 数据结构C++语言描述:应用标准模板库(STL)(第2版)
  • 《数据结构(C++版)》是2007年武汉大学出版社出版的图书,作者是王艳华、戴小鹏。 

    《数据结构(C++版)》对常用数据进行了系统的介绍,包括线性表、栈、队列、串、数组、树、图等,详细讨论了查找和排序的各种实现方法和算法,阐明了各种数据结构的内在逻辑关系及其在计算机中的存储表示,给出了每种数据结构的运算及算法描述,并进行了初步的算法分析。全书采用C++语言进行数据结构和算法的描述。

    本书对常用数据进行了系统的介绍,包括线性表、栈、队列、串、数组、树、图等,详细讨论了查找和排序的各种实现方法和算法,阐明了各种数据结构的内在逻辑关系及其在计算机中的存储表示,给出了每种数据结构的运算及算法描述,并进行了初步的算法分析。全书采用C++语言进行数据结构和算法的描述。

    本书力求概念清晰,注重理论联系实际。每一章后面均列举了典型应用实例,并配有算法和程序以供教学和实践使用。

    本书可作为高等学校计算机类专业或信息类相关专业的本科或专科教材,也可供从事计算机工程与应用工作的科技工作者参考。

    目录

    • 第1章 绪论
    • 本章主要知识点
    • 1.1引言
    • 1.2 常用术语和基本概念
    • 1.3 算法与算法分析
    • 1.3.1 算法的重要特性
    • 1.3.2 算法设计的基本要求
    • 1.3.3 算法的描述方法
    • 1.3.4 算法分析
    • 习题1
    • 第2章 线性表
    • 本章主要知识点
    • 2.1 线性表的定义及逻辑结构
    • 2.1.1 线性表的定义
    • 2.1.2 线性表的逻辑结构特征
    • 2.1.3 常见线性表的基本操作
    • 2.2 线性表的顺序存储结构
    • 2.2.1线性表的顺序存储结构及特点
    • 2.2.2 顺序存储的类型定义与运算实现
    • 2.2.3 算法效率分析
    • 2.3 线性表的链式存储结构
    • 2.3.1线性表的链式存储结构及特点
    • 2.3.2 链式存储的类型定义及运算实现
    • 2.3.3 循环链表和双向链表
    • 2.3.4 静态链表
    • 2.4 应用举例及分析——多项式抽象数据类型
    • 2.4.1 多项式表示
    • 2.4.2 多项式相加
    • 习题2
    • 第3章 栈和队列
    • 本章主要知识点
    • 3.1栈
    • 3.1.1 栈的定义及基本操作
    • 3.1.2 栈的顺序存储结构
    • 3.1.3 栈的链式存储结构
    • 3.1.4 栈的应用举例
    • 3.2 队列
    • 3.2.1队列的定义及基本操作
    • 3.2.2 队列的顺序存储结构
    • 3.2.3 队列的链式存储结构
    • 习题3
    • 第4章 其他线性数据结构
    • 本章主要知识点
    • 4.1串
    • 4.1.1 串的定义及基本操作
    • 4.1.2 串的存储结构
    • 4.1.3 串的基本操作的实现
    • 4.1.4 串的匹配
    • 4.2 多维数组
    • 4.2.1 数组的定义
    • 4.2.2 数组的顺序表示和实现
    • 4.2.3 稀疏矩阵的压缩存储
    • 4.2.4 稀疏矩阵的转置算法
    • 4.3 广义表
    • 4.3.1 广义表的定义
    • 4.3.2 广义表的存储结构
    • 4.3.3 广义表的递归算法
    • 4.4 应用举例及分析
    • 习题4
    • 第5章 树与二叉树
    • 本章主要知识点
    • 5.1 树的定义和基本操作
    • 5.1.1 树的定义
    • 5.1.2 基本术语
    • 5.1.3 树的基本操作
    • 5.2 二叉树
    • 5.2.1二叉树的定义及基本操作
    • 5.2.2 二叉树的性质
    • 5.2.3 二叉树的存储结构
    • 5.2.4 遍历二叉树
    • ……
    • 第6章 图
    • 第7章 查找
    • 第8章 排序
    • 第9章 文件
    • 参考文献
    展开阅读
    精选笔记1:C++ 数据结构之水洼的数量算法

    10小时30分钟前回答

    C++ 数据结构之水洼的数量算法

    题目: 有一个大小为N*M的园子, 雨后起了积水. 八连通的积水被认为是连接在一起的. 请求出园子里总共有多少水洼.

    使用深度优先搜索(DFS), 在某一处水洼, 从8个方向查找, 直到找到所有连通的积水. 再次指定下一个水洼, 直到没有水洼为止.
    则所有的深度优先搜索的次数, 就是水洼数. 时间复杂度O(8*M*N)=O(M*N).

    代码:

    /* 
     * main.cpp 
     * 
     * Created on: 2014.7.12 
     *本栏目更多精彩内容:http://www.bianceng.cn/Programming/sjjg/
     *   Author: spike 
     */
       
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 
    #include <math.h> 
       
    class Program { 
      static const int MAX_N=20, MAX_M=20; 
      int N = 10, M = 12; 
      char field[MAX_N][MAX_M+1] = { 
          "W........WW.", 
          ".WWW.....WWW", 
          "....WW...WW.", 
          ".........WW.", 
          ".........W..", 
          "..W......W..", 
          ".W.W.....WW.", 
          "W.W.W.....W.", 
          ".W.W......W.", 
          "..W.......W."}; 
      void dfs(int x, int y) { 
        field[x][y] = '.'; 
        for (int dx = -1; dx <= 1; dx++) { 
          for (int dy = -1; dy <= 1; dy++) { 
            int nx = x+dx, ny = y+dy; 
            if (0<=dx&&nx<N&&0<=ny&&ny<=M&&field[nx][ny]=='W') dfs(nx, ny); 
          } 
        } 
        return; 
      } 
    public: 
      void solve() { 
        int res=0; 
        for (int i=0; i<N; i++) { 
          for (int j=0; j<M; j++) { 
            if (field[i][j] == 'W') { 
              dfs(i,j); 
              res++; 
            } 
          } 
        } 
        printf("result = %d\n", res); 
      } 
    }; 
       
       
    int main(void) 
    { 
      Program P; 
      P.solve(); 
      return 0; 
    }
    

    输出:

    result = 3

    感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    展开阅读
    精选笔记2:C++数据结构与算法之反转链表的方法详解

    14小时44分钟前回答

    本文实例讲述了C++数据结构与算法之反转链表的方法。分享给大家供大家参考,具体如下:

    算法概述:要求实现将一条单向链表反转并考虑时间复杂度。

    算法分析:

    数组法(略):

    将列表元素逐个保存进数组,之后再逆向重建列表
    点评:实现逻辑最简单,需要额外的内存开销。

    移动指针:

    通过三个指针逐个从链表头开始逐一反转链表元素的指针
    点评:不需要额外的内存开销,会改变原始链表。

    递归:

    以递归的方式首先找到链表尾部,再逐一反转指针
    点评:不需要额外的内存开销,不会改变原始链表。

    算法实现:

    构建链表结构

    /* 节点结构 */
    struct NODE
    {
     int data;
     struct NODE* next;
    };
    /* 添加元素-压栈 */
    void push(NODE** head, int dat) {
     struct NODE* new_node = new NODE();
     new_node->data = dat;
     new_node->next = *head;
     *head = new_node;
    }
    /* 添加元素-添加 */
    void add(NODE** head, int dat) {
     struct NODE* new_node = new NODE();
     new_node->data = dat;
     new_node->next = NULL;
     if (*head != NULL) {
      struct NODE* temp = *head;
      while (temp->next != NULL) {
       temp = temp->next;
      } 
      temp->next = new_node;
     }
     else {
      *head = new_node;
     }
    }
    
    

    移动指针

    /* 反转列表 */
    void reverse(NODE** head) {
     struct NODE* pre = NULL;
     struct NODE* cur = *head;
     struct NODE* nxt;
     while (cur != NULL) {
      // 反转指针
      nxt = cur->next;
      cur->next = pre;
      // 移动指针
      pre = cur;
      cur = nxt;
     }
     *head = pre;
    }
    
    

    递归

    /* 反转列表-复制原表返回反转表 */
    NODE* reverse(NODE* head) {
     if (head == NULL || head->next == NULL) {
      return head;
     }
     NODE* new_head = reverse(head->next);
     // 反转指针
     head->next->next = head;
     head->next = NULL;
     return new_head;
    }
    
    

    打印链表

    /* 打印队列 */
    void print(NODE* head) {
     NODE* temp = head;
     while (temp != NULL) {
      std::cout << temp->data << std::endl;
      temp = temp->next;
     }
    }
    
    

    完整代码如下:

    #include <iostream>
    /* 节点结构 */
    struct NODE
    {
      int data;
      struct NODE* next;
    };
    /* 添加元素-压栈 */
    void push(NODE** head, int dat) {
      struct NODE* new_node = new NODE();
      new_node->data = dat;
      new_node->next = *head;
      *head = new_node;
    }
    /* 添加元素-添加 */
    void add(NODE** head, int dat) {
      struct NODE* new_node = new NODE();
      new_node->data = dat;
      new_node->next = NULL;
      if (*head != NULL) {
        struct NODE* temp = *head;
        while (temp->next != NULL) {
          temp = temp->next;
        }  
        temp->next = new_node;
      }
      else {
        *head = new_node;
      }
    }
    /* 反转列表 */
    void reverse(NODE** head) {
      struct NODE* pre = NULL;
      struct NODE* cur = *head;
      struct NODE* nxt;
      while (cur != NULL) {
        // 反转指针
        nxt = cur->next;
        cur->next = pre;
        // 移动指针
        pre = cur;
        cur = nxt;
      }
      *head = pre;
    }
    /* 反转列表-复制原表返回反转表 */
    NODE* reverse(NODE* head) {
      if (head == NULL || head->next == NULL) {
        return head;
      }
      NODE* new_head = reverse(head->next);
      // 反转指针
      head->next->next = head;
      head->next = NULL;
      return new_head;
    }
    /* 打印队列 */
    void print(NODE* head) {
      NODE* temp = head;
      while (temp != NULL) {
        std::cout << temp->data << std::endl;
        temp = temp->next;
      }
    }
    int main() {
      struct NODE* n = NULL;
      add(&n, 1);
      add(&n, 2);
      add(&n, 3);
      n = reverse(n);
      print(n);
      return 0;
    }
    
    

    希望本文所述对大家C++程序设计有所帮助。

    展开阅读

    数据结构相关资源

    • 数据结构与算法分析:C++语言描述

      数据结构与算法分析:C++语言描述

      数据结构与算法分析:C++语言描述(第四版) 是数据结构和算法分析的经典教材,书中使用主流的程序设计语言C++作为具体的实现语言。书中内容包括表、栈、队列、树、散列表、优先队列、排

      大小:115.3 MB数据结构

      立即下载
    • 数据结构、算法与应用:C++语言描述

      数据结构、算法与应用:C++语言描述

      数据结构、算法与应用:C++语言描述(原书第2版) 共分三个部分。第一部分从第1章到第4章,旨在复习C++程序设计的概念以及程序性能的分析和测量方法。第二部分从第5章到第16章,研究数据结构

      大小:109.2 MB数据结构

      立即下载
    • C++数据结构与算法(第4版)

      C++数据结构与算法(第4版)

      这本《C++数据结构与算法(第4版)》全面系统地介绍了数据结构,并以C++语言实现相关的算法。 主要强调了数据结构和算法之间的联系,使用面向对象的方法介绍数据结构,其内容包括算法的复

      大小:192.9 MBc++

      立即下载
    • 数据结构 算法与应用 C++语言描述

      数据结构 算法与应用 C++语言描述

      《数据结构、算法与应用:C++语言描述》在简要回顾了基本的C++ 程序设计概念的基础上,全面系统地介绍了队列、堆栈、树、图等基本数据结构,以及贪婪算法、分而治之算法、分枝定界算法等多种算法设计方法,为数据结构与算法的继续学习和研究奠定了一个坚实的基础。更为可贵的是,《数据结构、算法与应用:C++语言描述》不仅仅介绍了理论知识,还提供了50多个应用实例及600多道练习题。 目录 译者序 前言 第一部分 预备知识 第1章 C++程序设计

      大小:259 KB数据结构

      立即下载
    • 数据结构:C++(第2版)

      数据结构:C++(第2版)

      数据结构是计算机专业教学计划中的核心课程,也是计算机及相关专业考研和水平等级考试的必考科目。要从事和计算机科学与技术相关的工作,尤其是计算机应用领域的开发和研制工作,必须具备坚实的数据结构基础。 《数据结构(C++版)(第2版)》介绍了数据结构、算法以及抽象数据类型的概念,介绍了线性表、栈、队列和串、数组、树和二叉树、图等常用数据结构,讨论了常用的查找、排序和索引技术,给出了较多的数据结构的应用实例。限于

      大小:672 KB数据结构

      立即下载

    学习笔记

    19小时33分钟前回答

    C++ 数据结构链表的实现代码

    C++ 链表 之前一直没怎么在意C++中的链表,但是突然一下子让自己写,就老是出错。没办法,决定好好恶补一下该方面的知识,也为今后的数据结构大下个良好的基础,于是我总结出以下几点,有些地方可能不正确,还望大家不吝赐教,旨在共同进步。 总结: 1、链表List的基本单元是节点Node,因此想要操作方便,就必须为每一步打好基础,Node的基本结构如下: class Node{public: int data; Node *next; Node(int da=0,Node *p=NULL){ this-data=da; this-next=p; }}; 我们可以看出,Node的成员变量一共有两个,都是public,因为我们要对这两个变量进行操作,所以不能是private类型的。然后是一个构造函数,第二个参数默认值为NULL,也……

    9小时57分钟前回答

    C++ 数据结构完全二叉树的判断

    C++ 数据结构完全二叉树的判断 完全二叉树(Complete Binary Tree):若设二叉树的深度为h,除第h层外,其他各层(1~h-1)的节点数都达到最大个数,第h层所有的节点都连续集中在最左边,这就是完全二叉树。完全二叉树由满二叉树而引起来的。对于深度为K的,有n个节点的二叉树,当且仅当每一个节点都与深度为K的满二叉树中编号从1到n的节点一一对应时称之为完全二叉树。 注意:满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树。 完全二叉树的特点 :完全二叉树的效率极高,堆是一种完全二叉树或者近似完全二叉树,像十分常用的排序算法、Dijkstra算法、Prim算法等都要用堆才能优化。 判断……