数据结构期末考试算法

1.设计一个高效的算法,从顺序表L中删除所有值为x的元素,要求时间复杂度为O(n),空间复杂度为O(1).

//p71
#define MAXSIZE 100
typedef struct
{
    ElemType elem[MAXSIZE];
    int last;
}SeqList;

void delx(SeqList * L,ElemType x)
{
    int i = 0;
    int j = 0;
    while(i <= L->last)
    {
        if(L->elem[i]!=x)
        {
            L->elem[j] = L->elem[i];
            i++;
            j++;
        }
        else
            i++;

    }
    L->last = j-1;
}

2.算法实现带头节点单链表的就地址逆置问题。

//p72
typedef struct Node
{
    ElemType data;
    struct Node * next;
}Node, *LinkList;

void ReverseList(LinkList L)
{
    Node * p;
    Node * q;
    p = L->next;
    L->next = NULL;
    while(p!=NULL)
    {
        q = p->next;
        p->next = L->next;
        L->next = p;
        p = q;
    }
}

3.已知一个带头结点的单链表L,其结点的元素值以非递减顺序排列,设计算法删除该单链表中元素值重复的结点。

typedef struct Node
{
    ElemType data;
    struct Node * next;
}Node, *LinkList;

void del(LinkList L)
{
    Node * p;
    Node * q;
    p=L->next;
    if(p==NULL)
        return error;
    while(p->next != NULL)
    {
        if(p->data != p->next->data)
            p = p->next;
        else
        {
            q = p->next;
            p->next = q->next;
            free(q);
        }
    }
}

4.以二叉链表做存储结构,编写算法输出二叉树中叶子结点(先序)。

//p166
typedef struct Node
{
    DataType data;
    struct Node * LChild;
    struct Node * RChild;

}BiTNode,*BiTree;

void InOrder(BiTNode root)
{
    if(root != NULL)
    {
        InOrder(root->LChild);
        Visit(root->data);
        InOrder(root->RChild);
    }
}

5.以二叉链表做存储结构,编写递归算法,求二叉树的高度(后序)。

//p169
typedef struct Node
{
    DataType data;
    struct Node * LChild;
    struct Node * RChild;

}BiTNode,*BiTree;

int PostTreeDepth(BiTree bt)
{
    int hl,hr,max;
    if(bt!=NULL)
    {
        hl = PostTreeDepth(bt->LChild);
        hr = PostTreeDepth(bt->RChild);
        max =hl>hr?hl:hr;
        return(max+1);
    }
    else
        return(0);
}

6.以二叉链表做存储结构,编写递归算法,求二叉树的高度(先序)。

//p169
typedef struct Node
{
    DataType data;
    struct Node * LChild;
    struct Node * RChild;

}BiTNode,*BiTree;

void PreTreeDepth(BiTree bt,int h)
{
    //先序遍历求二叉树bt高度的递归算法,h为bt指向结点所在层次,初值为1
    //depth 为当前求得的最大层次,为全局变量,调用前初值为0
    if(bt!=NULL)
    {
        if(h>depth)
        {
            depth = h;
        }
        PreTreeDepth(bt->LChild,h+1);
        PreTreeDepth(bt->RChild,h+1);
    }
}

7.折半查找法。

//p267
# define LIST_SIZE 20
typedef struct
{
    KeyType key;
    OtherType other_data;
}RecordType;

typedef struct
{
    RecordType r[LIST_SIZE+1]// r[0] 为工作单元
    int length;
} RecordList;

int BinSrch(RecordList l,KeyType k)
{
    int low = 1;
    int hight = l.length;//设置区间初值
    while(low<=hight)
    {
        mid=(low+hight) / 2;
        if(k==l.r[mid].key)
            return(mid);
        else if(k<l.r[mid].key)
            hight = mid-1;
        else
            low =mid+1;
    }
    return (0);
}

ps:此文章只是作为期末考试复习用,过后删除。

原文地址:https://www.cnblogs.com/yjlblog/p/9248481.html

时间: 2024-10-12 00:29:30

数据结构期末考试算法的相关文章

厦门大学数据结构期末考试单链表问题

因为过几天要去参加厦门大学的夏令营,提前刷了下厦门大学往年的期末考试试卷. 卷中有这么一道题目: 有一个单链表,其结点的元素值以递增顺序排列,给出数据结构,并编写一个算法删除该单链表中元素值相同的结点. 算法如下: 从头到尾扫描单链表,若当前结点和后继结点的值不相同,则指针后移,若相同,则删除该后继结点. 1 #include "stdio.h" 2 3 typedef struct Node{ 4 int data; 5 struct Node *next; 6 }Node, *Li

数据结构期末考试复习--3

删除 L 中所有值为 item 的元素 void Delete_e(SqList &L,ElemType e) {int i=0,j=L.length-1;//设置数组低.高端指针(下标). while(i<j) { while(i<j&&L.elem[i]!=e)i++; //若值不为e,右移指针. while(i<j&&L.elem[j]==e){ j--; // L.length--; }//若右端元素为item,指针左移 if(i<=

数据结构期末复习第一章绪论

前言: 最近快期末了,复习下数据结构,下列习题和答案解析,大部分来源于网络,如有不对之处还请指出. 在这里,星云祝各位考生期末考试顺利,新年快乐! 第一章绪论 1. 数据结构是一门研究非数值计算的程序设计问题中计算机的(操作对象)以及它们之间的(关系)和(操作)的学科. 2. 下列关于数据结构的基本概念中,叙述正确的是( C ). A. 数据元素是数据的最小单位. B. 数据的逻辑结构是指数据的各数据项之间的逻辑关系. C. 任何一个算法的设计取决于选定逻辑结构,而算法的实现依赖于采用的存储结构

数据库期末考试复习题 第一章

作者 : Dolphin 原文地址:http://blog.csdn.net/qingdujun/article/details/27820507 一.单项选择题: 1. 位于用户和操作系统之间的一层数据管理软件是  C    . A.DBS  B.DB  C.DBMS  D.MIS 2. 数据库系统中的数据模型通常由    A     三部分组成. A.数据结构.数据操作和完整性约束 B.数据定义.数据操作和安全性约束 C.数据结构.数据管理和数据保护 D.数据定义.数据管理和运行控制 3. 

【bzoj4868】[Shoi2017]期末考试 前缀和

题目描述 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程公布成绩,每等待一天就会产生C不愉快度.对于第i门课程,按照原本的计划,会在第bi天公布成绩.有如下两种操作可以调整公布成绩的时间:1.将负责课程X的部分老师调整到课程Y,调整之后公布课程X成绩的时间推迟一天,公布课程Y成绩的时间提前一天:每次操作产生A不愉快度.2.增加一部分老师

三分 BZOJ4868 [Sxoi2017] 期末考试

4868: [Sxoi2017]期末考试 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 605  Solved: 270[Submit][Status][Discuss] Description 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天 或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程 公布成绩,每等待一天就会产生C不愉快度.对

前端开发工程师 - 02.JavaScript程序设计 - 期末考试

期末考试客观题 期末考试主观题 https://www.15yan.com/story/aY0HWAQ7oNU/ 1(8分) 函数myType用于根据输入参数返回相应的类型信息. 语法如下: var str = myType (param); 使用范例如下: myType (1); 返回值: "number" myType (false); 返回值: "boolean" myType ({}); 返回值: "object" myType ([])

数据结构期末复习(三)

数据结构期末复习(三) 数组的存储结构 二维数组的顺序存储结构分为以行序为主序的存储方式和以列序为主序的存储方式. 以行序为主的存储方式就是常规的先存第0行的每列,再存第一行的每列,以此类推.以列为主的存储方式同理. 对于三维数组来说,按下标从左到右的顺序存储.例如,设a[0][0][0]的地址为p,则对于数组a[m][n][r],a[i][j][k] = p + (i*n*r + j*r + k)*l; 稀疏矩阵 三元组顺序表 转置函数最简单的方法就是row和col对应的值交换,并且row和c

高等代数期末考试

高等代数的最后一站,有惊无险. 高等代数期末考试试题