北京林业大学数据结构实验二 基于栈的算术表达式求值算法

这篇具有很好参考价值的文章主要介绍了北京林业大学数据结构实验二 基于栈的算术表达式求值算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第1关:基于栈的中缀算术表达式求值

参见课本P75 例3.3

#include <iostream>
#include<iomanip>

#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
using namespace std;
typedef struct {//运算符栈
    char *base;
    char *top;
    int stacksize;
} SqStack1;

Status InitStack1(SqStack1 &S) {//运算符栈初始化
    S.base = new char[MAXSIZE];
    if (!S.base) return ERROR;
    S.top = S.base;
    S.stacksize = MAXSIZE;
    return OK;
}

Status Push1(SqStack1 &S, char e) {//运算符栈入栈
    if (S.top - S.base == S.stacksize) return ERROR;
    *S.top = e;
    S.top++;
    return OK;

}

Status Pop1(SqStack1 &S) {//运算符栈出栈
    if (S.top == S.base) return ERROR;
    S.top--;
    return OK;

}

char GetTop1(SqStack1 S) {//运算符栈取栈顶元素

    if (S.top != S.base)
        return *(S.top - 1);
}

typedef struct {//操作数栈
    double *base;
    double *top;
    int stacksize;
} SqStack2;

Status InitStack2(SqStack2 &S) {//操作数栈初始化
    S.base = new double[MAXSIZE];
    if (!S.base) return ERROR;
    S.top = S.base;
    S.stacksize = MAXSIZE;
    return OK;
}

Status Push2(SqStack2 &S, double e) {//操作数栈入栈
    if (S.top - S.base == S.stacksize) return ERROR;
    *S.top = e;
    S.top++;
    return OK;
}

Status Pop2(SqStack2 &S) {//操作数栈出栈
    if (S.top == S.base) return ERROR;
    S.top--;
    return OK;
}

double GetTop2(SqStack2 S) {//操作数栈取栈顶元素
    if (S.top != S.base)
        return *(S.top - 1);
}

double Calculate(double a, char op, double b) {//计算表达式“a op b”的值
    switch (op) {
        case '+':
            return a + b;
            break;
        case '-':
            return a - b;
            break;
        case '*':
            return a * b;
            break;
        case '/':
            return a / b;
            break;
        default:
            return 0;
    }
}

char Precede(char a, char b) {//比较运算符a和b的优先级 没什么好说的枚举就完事了
    if ((a == '(' && b == ')') || (a == '=' && b == '='))return '=';
    else if (((a == '+' || a == '-' || a == '*' || a == '/' || a == ')') &&
              (b == '+' || b == '-' || b == ')' || b == '=')) ||
             ((a == '*' || a == '/' || a == ')') && (b == '*' || b == '/')))
        return '>';
    else if (((a == '(' || a == '=') && b != ')' && b != '=') || ((a == '+' || a == '-') && (b == '*' || b == '/')) ||
             a == '(' || b == '(')
        return '<';
}

bool judge(const char c) {
    if (c == '+' || c == '-' || c == '*' || c == '/' || c == '=' || c == '(' || c == ')') return true;
    return false;
}

double EvaluateExpression(SqStack1 OPTR, SqStack2 OPND, char s[]) {//算术表达式求值的算符优先算法
    //设OPTR和OPND分别为运算符栈和操作数栈
    //表达式求值算法调用Precede函数和Calculate函数
    OPTR.top = OPTR.base;
    OPND.top = OPND.base;
    Push1(OPTR, '=');
    char theta;
    double a = 0, b = 0;
    int i = 0;
    while (s[i] != '=' || GetTop1(OPTR) != '=' && i < MAXSIZE) {
        // 对数字进行解析
        if (!judge(s[i])) { // 解析数字求出数字
            // 整数部分
            double result = 0;
            while (s[i] != '.' && s[i] >= '0' && s[i] <= '9') {
                result = result * 10 + (s[i] - 48);
                ++i;
            }

            // 小数部分
            double result1 = 0;
            double Multiplier = 1.0 / 10;
            if (s[i] == '.') i++;

            while (s[i] >= '0' && s[i] <= '9') {
                result1 += Multiplier * (s[i] - 48);
                Multiplier *= 1.0 / 10;
                i++;
            }

            result += result1;
//            cout << result << endl;
            Push2(OPND, result);
        } else
            switch (Precede(GetTop1(OPTR), s[i])) {
                case '<':
                    Push1(OPTR, s[i]);
                    i++;
                    break;
                case '>':
                    theta = GetTop1(OPTR);
                    Pop1(OPTR);

                    a = GetTop2(OPND);
                    Pop2(OPND);
                    b = GetTop2(OPND);
                    Pop2(OPND);

                    Push2(OPND, Calculate(b, theta, a));
                    break;

                case '=':
                    Pop1(OPTR);
                    i++;
                    break;

            }
    }

    return GetTop2(OPND);
}

第2关: 中缀表达式转化为后缀表达式

#include<iostream>

using namespace std;
#define  MAXSIZE  100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef struct {
    char *base;
    char *top;
    int stacksize;
} SqStack;

Status InitStack(SqStack &S) {//初始化栈
    S.base = new char[MAXSIZE];
    if (!S.base) return ERROR;
    S.top = S.base;
    S.stacksize = MAXSIZE;
    return OK;
}

Status Push(SqStack &S, char e) {//入栈
    if (S.top - S.base == S.stacksize) return ERROR;
    *S.top = e;
    S.top++;
    return OK;
}

Status Pop(SqStack &S) {//出栈
    if (S.top == S.base) return ERROR;
    S.top--;
    return OK;
}

char GetTop(SqStack S) {//取栈顶元素
    if (S.top != S.base)
        return *(S.top - 1);
}

char Precede(char a, char b) {//比较运算符a和b的优先级
    if ((a == '(' && b == ')') || (a == '=' && b == '='))return '=';
    else if (((a == '+' || a == '-' || a == '*' || a == '/' || a == ')') &&
              (b == '+' || b == '-' || b == ')' || b == '=')) ||
             ((a == '*' || a == '/' || a == ')') && (b == '*' || b == '/')))
        return '>';
    else if (((a == '(' || a == '=') && b != ')' && b != '=') || ((a == '+' || a == '-') && (b == '*' || b == '/')) ||
             a == '(' || b == '(')
        return '<';
}

bool judge(const char c) {
    if (c == '+' || c == '-' || c == '*' || c == '/' || c == '=' || c == '(' || c == ')') return true;
    return false;
}

void InfixToSuffix(SqStack OPTR, char s[]) {//将中缀表达式转化为后缀表达式并输出
    int i = 0;
    while ((s[i] != '=' || GetTop(OPTR) != '=') && s[i] != '\0') {
    if(!judge(s[i])){
        cout << s[i];
        i++;
    }
    else{
        switch (Precede(GetTop(OPTR),s[i])) {
            case '<':
                Push(OPTR,s[i]);
                i++;
                break;
            case '>':
                if(GetTop(OPTR) != ')' && GetTop(OPTR) != '(')
                cout << GetTop(OPTR);
                Pop(OPTR);
                break;

            case '=':
                if(GetTop(OPTR) != ')' && GetTop(OPTR) != '(')
                cout << GetTop(OPTR);
                Pop(OPTR);
                i++;
                break;
        }
    }
    }
    cout << endl;
}

第3关:基于栈的后缀算术表达式求值

#include <iostream>
#include<iomanip>
#include <string>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
using namespace std;
typedef struct {//操作数栈
    double *base;
    double *top;
    int stacksize;
} SqStack;

Status InitStack(SqStack &S) {//操作数栈初始化
    S.base = new double[MAXSIZE];
    if (!S.base) return ERROR;
    S.top = S.base;
    S.stacksize = MAXSIZE;
    return OK;
}

Status Push(SqStack &S, double e) {//操作数栈入栈
    if (S.top - S.base == MAXSIZE) return ERROR;
    *S.top = e;
    S.top ++;
    return OK;
}

Status Pop(SqStack &S) {//操作数栈出栈
    if (S.top == S.base) return ERROR;
    S.top--;
    return OK;
}

double GetTop(SqStack S) {//操作数栈取栈顶元素
    if (S.top != S.base) return *(S.top - 1);
}

double Calculate(double a, char op, double b) {//计算表达式“a op b”的值
    switch (op) {
        case '+':
            return a + b;
            break;
        case '-':
            return a - b;
            break;
        case '*':
            return a * b;
            break;
        case '/':
            return a / b;
        default:
            return 0;
    }
}
bool judge(char c){
    if(c == '+' || c == '-' || c == '*' || c == '/' || c == '='  )
        return true;
    return false;
}
double EvaluateExpression(SqStack OPND, char s[]) {//后缀算术表达式求值
    //设OPND为操作数栈
    //表达式求值算法调用Calculate函数
    char theta;
    double a, b;
    int i = 0;
    while (s[i] != '='){
        if(s[i] == ' ') {
            i++;
            continue;
        }
        if(!judge(s[i])){
            double num = s[i] - 48;
            Push(OPND,num);
            i++;
            continue;
        }
        else{

            b = GetTop(OPND);
            Pop(OPND);
            a = GetTop(OPND);
            Pop(OPND);
            Push(OPND, Calculate(a,s[i],b));
            i++;
        }
        }
    return GetTop(OPND);
}

第4关:入栈和出栈的基本操作

#include<iostream>

using namespace std;
#define  MAXSIZE  100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef struct {
    int *base;
    int *top;
    int stacksize;
} SqStack;

Status InitSqStack(SqStack &S) {//栈的初始化
    S.base = new int [MAXSIZE];
    if (!S.base) return ERROR;
    S.top = S.base;
    S.stacksize = MAXSIZE;
    return OK;
}

Status Push(SqStack &S, int e) {//入栈
    if (S.top - S.base == S.stacksize) return ERROR;
    *S.top = e;
    S.top++;
    return OK;
}

Status Pop(SqStack &S) {//出栈
    if (S.top == S.base) return ERROR;
    S.top--;
    return OK;
}

Status GetTop(SqStack S) {//取栈顶元素
    if (S.top != S.base)
        return *(S.top - 1);
    else return 0;
}
//本关任务:输入一个整数序列a1,a2,a3...,an。当ai不等于-1时将ai进栈;当ai=-1时,输出栈顶元素并将其出栈。
void InOutS(SqStack &S, int a[], int n) {//入栈和出栈的基本操作
    for (int i = 0; i < n; ++i) {
        if(a[i] != -1){
            Push(S,a[i]);
        }
        else{
            if(GetTop(S)){
                cout << GetTop(S) << endl;
                Pop(S);
            }
            else {
                cout << "POP ERROR" << endl;
                break;
        }
    }
}
}

第5关:双栈的基本操作

基于栈的中缀算术表达式求值,算法,数据结构,c++文章来源地址https://www.toymoban.com/news/detail-736356.html

#include<iostream>

using namespace std;
typedef int Status;
typedef struct {
    int top[2], bot[2];//栈顶和栈底指针
    int *V;//栈数组
    int m;//栈最大可容纳元素个数
} DblStack;

void InitDblStack(DblStack &S, int m) {//初始化一个大小为m的双向栈
    S.V = new int[m];
    if(!S.V) return;
    S.bot[0] = S.top[0] = -1;
    S.bot[1] = S.top[1] = m;
    return;
}

Status IsEmpty(DblStack S, int i) {//判断指定的i号栈是否为空,空返回1,否则返回0
    if (S.top[i] == S.bot[i]) return 1;
    return 0;
}

Status IsFull(DblStack S) {//判断栈是否满,满则返回1,否则返回0
    if (S.top[0] + 1 == S.top[1])
        return 1;
    return 0;
}

void Push(DblStack &S, int i) {//向指定的i号栈中插入元素x,先移动指针再入栈
    int x;
    cin >> x;
    if (IsFull(S)) return;
    if (i == 0) {
        S.V[++S.top[0]] = x;
    } else {
        S.V[--S.top[1]] = x;
    }

}

void Pop(DblStack &S, int i) {//删除指定的i号栈的栈顶元素,先出栈再移动指针
    if (S.top[i] == S.bot[i]) {
        return;
    }

    if (i == 0) {
        cout << S.V[S.top[0]--] << ' ';
    } else if (i == 1) {
        cout << S.V[S.top[1]++] << ' ';
    }
    return;
}

第6关: 基于栈的回文字符序列判断

#include <iostream>

#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
using namespace std;
typedef struct {
    char *base;
    char *top;
    int stacksize;
} SqStack;

Status InitStack(SqStack &S) {//栈初始化
    S.base = new char[MAXSIZE];
    if (!S.base) return ERROR;
    S.top = S.base;
    S.stacksize = MAXSIZE;
    return OK;
}

Status Push(SqStack &S, char e) {//入栈
    if (S.top - S.base == S.stacksize) return ERROR;
    *S.top = e;
    S.top++;
    return OK;
}

Status Pop(SqStack &S) {//出栈返回栈顶元素
    if(S.top == S.base) return ERROR;
    S.top--;
}
char  Get(SqStack &S){
    if(S.top == S.base) return 0;
    return *(S.top - 1);
}
Status IsPalindrome(SqStack &S, char *t) {//判断栈的回文字符序列,不等则返回零, 相等则返回1
    int i = 0;
    while (t[i] != '\0'){
//        cout << t[i] << endl;
        Push(S,t[i]);
        i++;
    }
    i--;
    for (int j = 0; j < i; ++j) {
        char e = Get(S);
        if(t[j] != e) return 0;
        Pop(S);
    }
    return 1;

}

第7关:基于栈的可操作判断

#include <iostream>

#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
using namespace std;
typedef struct {
    char *base;
    char *top;
    int stacksize;
} SqStack;

Status InitStack(SqStack &S) {//初始化栈
    S.base = new char[MAXSIZE];
    if (!S.base) return ERROR;
    S.top = S.base;
    S.stacksize = MAXSIZE;
    return OK;
}

Status Push(SqStack &S) {//入栈
    if (S.top - S.base == S.stacksize) return ERROR;
    S.top++;
    return OK;
}

Status Pop(SqStack &S) {//出栈
    S.top--;
}

Status IsEmpty(SqStack S) {//判断栈是否为空,空返回1,否则返回0
    if(S.top == S.base) return 1;
    return 0;
}

bool Judge(char a[], SqStack &S) {//栈的可操作判断
int pos = 0;
    while (a[pos] != '\0'){
        if(a[pos] == 'I') Push(S);
        else {
            if(IsEmpty(S)) return 0;
            else Pop(S);
        }
        pos++;
    }
    return IsEmpty(S);
}

第8关:Ackermann函数的递归求值

#include<iostream>

using namespace std;

int Ack(int m, int n) {//Ackermann函数的递归求值
    if (m == 0) return n + 1;
    if (m > 0 && n == 0) return Ack(m - 1, 1);
    return Ack(m - 1, Ack(m, n - 1));
}

第9关:Ackermann函数的非递归求值

#include<iostream>

using namespace std;
#define MAXSIZE 100

int Ack(int m, int n) {//Ackermann函数的非递归求值
    int arrary[m + 1][MAXSIZE ];
    for (int j = 0; j < MAXSIZE; j++)
        arrary[0][j] = j + 1;
    for (int i = 1; i <= m; i++) {
        arrary[i][0] = arrary[i - 1][1];
        for (int j = 1; j < MAXSIZE; j++)
            arrary[i][j] = arrary[i - 1][arrary[i][j - 1]];
    }
    return (arrary[m][n]);
}

第10关:递归求解单链表中的最大值

#include <iostream>
#include "algorithm"
using namespace std;
typedef struct LNode {
    int data;
    struct LNode *next;
} LNode, *LinkList;

void CreateList_R(LinkList &L, int n) {//后插法创建单链表
   L = new LNode();
   LinkList pre = L;
    for (int i = 0; i < n; ++i) {
        LinkList cur = new LNode();
        cin >> cur->data;
        pre->next = cur;
        pre = pre->next;
    }
}

int GetMax(LinkList L) {//递归求解单链表中的最大值
    if( L == nullptr) return INT32_MIN;
    return max(L->data, GetMax(L->next));
}

第11关:递归求解单链表中的结点个数

#include <iostream>

using namespace std;
typedef struct LNode {
    int data;
    struct LNode *next;
} LNode, *LinkList;

void CreateList_R(LinkList &L, int n) {//后插法创建单链表
    L = new LNode();
    LinkList pre = L;
    for (int i = 0; i < n; ++i) {
        LinkList cur = new LNode();
        cin >> cur->data;
        pre->next = cur;
        pre = pre->next;
    }
}

int GetLength(LinkList L) {//递归求解单链表中的结点个数
    if(L == nullptr)return 0;
    return 1 + GetLength(L->next);
}

第12关:递归求解单链表中的平均值

#include <iostream>

using namespace std;
typedef struct LNode {
    int data;
    struct LNode *next;
} LNode, *LinkList;

void CreateList_R(LinkList &L, int n) {//后插法创建单链表
    L = new LNode();
    LinkList pre = L;
    for (int i = 0; i < n; ++i) {
        LinkList cur = new LNode();
        cin >> cur->data;
        pre->next = cur;
        pre = pre->next;
    }
}

double GetAverage(LinkList L, int n) {//递归求解单链表中的平均值
    if (L == nullptr) return 0;
    if(n == 1) return L->data;
    return (L->data + (n - 1) * GetAverage(L->next, n - 1)) / n;
}

第13关:基于循环链表的队列的基本操作

#include<iostream>

using namespace std;
typedef int Status;
typedef struct QNode {//队列的链式存储结构
    int data;
    struct QNode *next;
} QNode, *QueuePtr;
typedef struct {
    QueuePtr rear;    //只设一个队尾指针
} LinkQueue;

Status EmptyQueue(LinkQueue Q) {//判断队列是否为空,空返回1,否则返回0
//队列只有一个头结点,即当头结点的指针域指向自己时,队列为空
    if (Q.rear->next == Q.rear) return 1;
    return 0;
}

void EnQueue(LinkQueue &Q, int e) {//入队,插入元素e为Q的新的队尾元素
    QueuePtr queuePtr = new QNode();
    queuePtr->data = e;
    queuePtr->next = Q.rear->next;
    Q.rear->next = queuePtr;
    Q.rear = Q.rear->next;
}

void DeQueue(LinkQueue &Q) {//出队,输出Q的队头元素值,后将其删除
    QueuePtr q = Q.rear->next->next;
    cout << q->data << ' ';
    Q.rear->next->next = q->next;
    if (q == Q.rear) {
        Q.rear = Q.rear->next;
    }

}

第14关:附加判定标志的循环队列的基本操作

#include<iostream>

using namespace std;
#define MAXSIZE 100
#define OK 0
#define OVERFLOW -1
#define ERROR -2
typedef int Status;
typedef struct {
    int *base;
    int front, rear, tag;
} SqQueue;

Status InitQueue(SqQueue &Q) {//构造一个空队列Q
    Q.base = new int[MAXSIZE];
    if (!Q.base) return ERROR;
    Q.front = Q.rear = 0;
    return OK;
}

Status EnQueue(SqQueue &Q, int e) {//插入元素e为Q的新的队尾元素
    if ((Q.rear + 1) % MAXSIZE == Q.front) return ERROR;
    Q.base[Q.rear] = e;
    Q.rear = (Q.rear + 1) % MAXSIZE;
    return OK;
}

Status DeQueue(SqQueue &Q) {//删除Q的队头元素,用e返回其值
    if (Q.front == Q.rear) return ERROR;
    auto e = Q.base[Q.front];
    Q.front = (Q.front + 1) % MAXSIZE;
    return e;
}

第15关:基于两端操作的循环队列的实现

#include<iostream>

using namespace std;
#define MAXSIZE 100
#define OK 0
#define OVERFLOW -1
#define ERROR -2
typedef int Status;
typedef struct {
    int *base;
    int front, rear, tag;
} SqQueue;

Status InitQueue(SqQueue &Q) {//构造一个空队列Q
    Q.base = new int[MAXSIZE];
    if (!Q.base) return ERROR;
    Q.front = Q.rear = 0;
    return OK;
}

Status EnQueue(SqQueue &Q, int e) {//插入元素e为Q的新的队尾元素
    if ((Q.rear + 1) % MAXSIZE == Q.front) return ERROR;
    Q.base[Q.rear] = e;
    Q.rear = (Q.rear + 1) % MAXSIZE;
    return OK;
}

Status DeQueue(SqQueue &Q) {//删除Q的队头元素,用e返回其值
    if (Q.front == Q.rear) return ERROR;
    auto e = Q.base[Q.front];
    Q.front = (Q.front + 1) % MAXSIZE;
    return e;
}

到了这里,关于北京林业大学数据结构实验二 基于栈的算术表达式求值算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构与算法基础(青岛大学-王卓)(5)

    叮叮咚咚,新一期来袭,我还在吃桃子,吃桃子,吃桃子。。。串和python的字符串差不多,数组和广义表像是python的list 串(string) - 字符串 概念及术语 定义: 零个或多个任意字符组成的有限序列,是一种内容受限的线性表 子串 : 串中任意个连续字符组成的子序列称为该串的

    2024年02月09日
    浏览(19)
  • 数据结构与算法基础(青岛大学-王卓)(1)

    程序=数据结构+算法 数据(data) 数值型 非数值型(文字,图像…) 数据元素(data element) 数据的基本单位,在程序中当做一个整体进行考虑和处理(如表中的一行包含多列信息) 是数据这个集合的个体 数据项(data item) 构成数据元素的不可分割的 最小单位 () 数据对象(data object) 性质相

    2024年02月03日
    浏览(15)
  • python-数据结构-大学生-航空订票系统

    python-数据结构-大学生-航空订票系统 航空订票系统:可以实现航空客运订票的主要业务活动 基本要求: (1)航线管理:每条航线所涉及的信息由:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量; (2)客户管理:有关订票的客户信息(包括姓名、订

    2024年02月09日
    浏览(15)
  • 图解数据结构系列丛书(由清华大学出版社出版)

    由清华大学出版社出版的“图解数据结构系列丛书”提供 C++、C、C#、Python、JavaScript、Java 等多种语言版本,通过丰富的图例和视频教程,让学习更加直观、高效,让你轻松掌握数据结构。无论您选择哪种语言版本,都能帮助您快速理解和掌握数据结构的核心概念,提升编程能

    2024年02月04日
    浏览(13)
  • 安庆师范大学之计科-数据结构MOOC期末考试

    5分/题,共30题  1、在长度为n的顺序表的第i个位置上插入一个元素,i的合理取值范围是( )。 A.1≤i≤n    B.任意正整数 C.i≥0 D.1≤i≤n+1  正确答案:D 2‏、已知L是带表头结点单链表的头指针,摘除首元结点的语句是( )。 A.L-next=L; B.L=L-next; C.L=L-next-next; D.L-next=L-next-nex

    2024年02月09日
    浏览(16)
  • 郑州轻工业大学2022-2023(2)数据结构题目集

    目录 6-1 线性表元素的区间删除                                   6-2 有序表的插入 6-3 合并两个有序数组                                          6-4 顺序表操作集 6-5 递增的整数序列链表的插入                            6

    2024年02月10日
    浏览(19)
  • 只考一门数据结构!安徽工程大学计算机考研

    安徽工程大学 考研难度(☆) 内容: 23考情概况(拟录取和复试分析) 、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文992字,预计阅读:3分钟 2023考情概况 安徽工程大学计算机相关各专业复试和拟录取分析: 083500软件工程一志愿拟录取12人

    2024年02月10日
    浏览(15)
  • 上机实验四 哈希表设计 西安石油大学数据结构

    (1)实验目的:掌握哈希表的设计方法及其冲突解决方法。 (2)主要内容: 已知一个含有10个学生信息的数据表,为学生“姓名”的拼音,给出此表的一个哈希表设计方案。 要求: 1)建立哈希表:要求哈希函数采用除留余数法,解决冲突方法采用链表法。 2)编写

    2024年02月05日
    浏览(19)
  • 郑州轻工业大学近几年数据结构试卷

    近几年数据结构试卷: 链接:https://pan.baidu.com/s/1_ns6dbps8i6UyLN5RNJJiw?pwd=g3z2  提取码:g3z2 2019-2020(2)数据结构期末考试试卷    一、 简答题(共10题,100分)  1、已知某二叉树的先序序列和中序序列分别为ABDGEHCFI和DGBHEACIF,请画出这棵二叉树,并画出二叉树对应的森林。  

    2024年01月25日
    浏览(15)
  • 上机实验二 设计单循环链表 西安石油大学数据结构

    (1)实验目的:掌握线性表的链式存储结构;掌握单循环链表及其基本操作的实现。 (2)主要内容:实现单循环链表的初始化、求数据元素个数、插入、删除、取数据元素等操作;用插入法建立带头结点的单循环链表;设计一个测试主函数验证所设计单循环链表的正确性。 掌握线性

    2024年02月07日
    浏览(18)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包