广工 AnyviewC 数据结构习题 第二章 您所在的位置:网站首页 anyview操作 广工 AnyviewC 数据结构习题 第二章

广工 AnyviewC 数据结构习题 第二章

2023-08-07 00:37| 来源: 网络整理| 查看: 265

广工 AnyviewC 数据结构习题 第二章 广工 AnyviewC 数据结构习题 第二章Anyview 数据结构 第二章1【题目】试写一算法,实现顺序栈的判空操作2【题目】试写一算法,实现顺序栈的取栈顶元素操作3【题目】试写一算法,实现顺序栈的出栈操作4 【题目】若顺序栈的类型重新定义如下。试编写算法,5【题目】若顺序栈的类型重新定义如下。试编写算法,6【题目】若顺序栈的类型重新定义如下。试编写算法,7 【题目】若顺序栈的类型重新定义如下。试编写算法,8【题目】试写一算法,借助辅助栈,复制顺序栈S1得到S2。9【题目】试写一算法,求循环队列的长度。10【题目】如果希望循环队列中的元素都能得到利用,11【题目】假设将循环队列定义为:以域变量rear12【题目】已知k阶斐波那契序列的定义为:12【题目】设A=(a1,…,am)和B=(b1,…,bn)均为有序顺序表,13 【题目】试写一算法,实现顺序表的就地逆置,14【题目】试对一元稀疏多项式Pn(x)采用存储量同多项式15 【题目】假设有两个集合A和B分别用两个线性表LA和LB16【题目】试写一算法,实现链栈的判空操作。17 【题目】试写一算法,实现链栈的取栈顶元素操作。18 【题目】试写一算法,实现链队列的判空操作。19 【题目】试写一算法,实现链队列的求队列长度操作。20【题目】(PE68) 假设以带头结点的循环链表表示队列,并且在自己电脑的测试代码及数据 21 【题目】试写一算法,实现带头结点单链表的判空操作。22 【题目】试写一算法,实现带头结点单链表的销毁操作。23 【题目】试写一算法,实现带头结点单链表的清空操作。24 【题目】试写一算法,实现带头结点单链表的求表长度操作。25(PE82)【题目】试写一算法,在带头结点单链表L插入第i元素e。测试代码 26(84)【题目】试写一算法,在带头结点单链表删除第i元素到e。27 【题目】试写一算法,在带头结点单链表的第i元素起的28【题目】试写一算法,在带头结点单链表删除第i元素29【题目】试写一算法,删除带头结点单链表中所有值30【题目】试写一算法,删除带头结点单链表中所有值

广工 AnyviewC 数据结构习题 第二章 Anyview 数据结构 第二章

/**********

1【题目】试写一算法,实现顺序栈的判空操作 StackEmpty_Sq(SqStack S)。

顺序栈的类型定义为:

typedef struct { ElemType *elem; // 存储空间的基址 int top; // 栈顶元素的下一个位置,简称栈顶位标 int size; // 当前分配的存储容量 int increment; // 扩容时,增加的存储容量 } SqStack; // 顺序栈

***********/

Status StackEmpty_Sq(SqStack S) /* 对顺序栈S判空。 */ /* 若S是空栈,则返回TRUE;否则返回FALSE */ { if ( S.top == 0) return TRUE; return FALSE; }

/**********

2【题目】试写一算法,实现顺序栈的取栈顶元素操作 GetTop_Sq(SqStack S, ElemType &e)。

顺序栈的类型定义为:

typedef struct { ElemType *elem; // 存储空间的基址 int top; // 栈顶元素的下一个位置,简称栈顶位标 int size; // 当前分配的存储容量 int increment; // 扩容时,增加的存储容量 } SqStack; // 顺序栈

***********/

Status GetTop_Sq(SqStack S, ElemType &e) /* 取顺序栈S的栈顶元素到e,并返回OK; */ /* 若失败,则返回ERROR。 */ { if (S.top==0) return ERROR; e = S.elem[S.top-1]; return OK; }

/**********

3【题目】试写一算法,实现顺序栈的出栈操作 Pop_Sq(SqStack &S, ElemType &e)。

顺序栈的类型定义为:

typedef struct { ElemType *elem; // 存储空间的基址 int top; // 栈顶元素的下一个位置,简称栈顶位标 int size; // 当前分配的存储容量 int increment; // 扩容时,增加的存储容量 } SqStack; // 顺序栈

***********/

Status Pop_Sq(SqStack &S, ElemType &e) /* 顺序栈S的栈顶元素出栈到e,并返回OK;*/ /* 若失败,则返回ERROR。 */ { if (S.top==0) return ERROR; e = S.elem[S.top-1]; S.top-=1; return OK; }

/**********

4 【题目】若顺序栈的类型重新定义如下。试编写算法,

构建初始容量和扩容增量分别为size和inc的空顺序栈S。

typedef struct { ElemType *elem; // 存储空间的基址 ElemType *top; // 栈顶元素的下一个位置 int size; // 当前分配的存储容量 int increment; // 扩容时,增加的存储容量 } SqStack2;

***********/

Status InitStack_Sq2(SqStack2 &S, int size, int inc) /* 构建初始容量和扩容增量分别为size和inc的空顺序栈S。*/ /* 若成功,则返回OK;否则返回ERROR。 */ { if (size>0 && inc>0) { S.size=size; S.increment=inc; S.top=size; return OK; } return ERROR; }

/**********

5【题目】若顺序栈的类型重新定义如下。试编写算法,

实现顺序栈的判空操作。

typedef struct { ElemType *elem; // 存储空间的基址 ElemType *top; // 栈顶元素的下一个位置 int size; // 当前分配的存储容量 int increment; // 扩容时,增加的存储容量 } SqStack2;

***********/

Status StackEmpty_Sq2(SqStack2 S) /* 对顺序栈S判空。 */ /* 若S是空栈,则返回TRUE;否则返回FALSE */ { if (S.top==S.elem) return TRUE; return FALSE; }

/**********

6【题目】若顺序栈的类型重新定义如下。试编写算法,

实现顺序栈的入栈操作。

typedef struct { ElemType *elem; // 存储空间的基址 ElemType *top; // 栈顶元素的下一个位置 int size; // 当前分配的存储容量 int increment; // 扩容时,增加的存储容量 } SqStack2;

***********/

Status Push_Sq2(SqStack2 &S, ElemType e) /* 若顺序栈S是满的,则扩容,若失败则返回ERROR。*/ /* 将e压入S,返回OK。 */ { if (S.top>=S.elem+S.size) { if (S.increment if (S.top==S.elem) return ERROR; e = *(S.top-1); S.top-=1; return OK; }

/**********

8【题目】试写一算法,借助辅助栈,复制顺序栈S1得到S2。

顺序栈的类型定义为:

typedef struct { ElemType *elem; // 存储空间的基址 int top; // 栈顶元素的下一个位置,简称栈顶位标 int size; // 当前分配的存储容量 int increment; // 扩容时,增加的存储容量 } SqStack; // 顺序栈

可调用顺序栈接口中下列函数:

Status InitStack_Sq(SqStack &S, int size, int inc); // 初始化顺序栈S Status DestroyStack_Sq(SqStack &S); // 销毁顺序栈S Status StackEmpty_Sq(SqStack S); // 栈S判空,若空则返回TRUE,否则FALSE Status Push_Sq(SqStack &S, ElemType e); // 将元素e压入栈S Status Pop_Sq(SqStack &S, ElemType &e); // 栈S的栈顶元素出栈到e

***********/

Status CopyStack_Sq(SqStack S1, SqStack &S2) /* 借助辅助栈,复制顺序栈S1得到S2。 */ /* 若复制成功,则返回TRUE;否则FALSE。 */ { ElemType e; SqStack S0; InitStack_Sq(S0, S1.size, S1.increment); InitStack_Sq(S2, S1.size, S1.increment); S0.top=0; S2.top=0; if (StackEmpty_Sq(S1)==TRUE ) { return TRUE; } int i,l; l=S1.top; for (i=0;i Pop_Sq(S0, e); Push_Sq(S2,e); } DestroyStack_Sq(S0); return OK; }

/**********

9【题目】试写一算法,求循环队列的长度。

循环队列的类型定义为:

typedef struct { ElemType *base; // 存储空间的基址 int front; // 队头位标 int rear; // 队尾位标,指示队尾元素的下一位置 int maxSize; // 最大长度 } SqQueue;

***********/

int QueueLength_Sq(SqQueue Q) /* 返回队列Q中元素个数,即队列的长度。 */ { int l = (Q.rear - Q.front + Q.maxSize) % Q.maxSize ; return l; }

/**********

10【题目】如果希望循环队列中的元素都能得到利用,

则可设置一个标志域tag,并以tag值为0或1来区分尾 指针和头指针值相同时的队列状态是"空"还是"满"。 试编写与此结构相应的入队列和出队列的算法。 本题的循环队列CTagQueue的类型定义如下:

typedef struct { ElemType elem[MAXQSIZE]; int tag; int front; int rear; } CTagQueue;

**********/

Status EnCQueue(CTagQueue &Q, ElemType x) /* 将元素x加入队列Q,并返回OK;*/ /* 若失败,则返回ERROR。 */ { if (Q.tag == 1 && Q.front==Q.rear) return ERROR; Q.elem[Q.rear]=x; Q.rear=(Q.rear+1) % MAXQSIZE; return OK; } Status DeCQueue(CTagQueue &Q, ElemType &x) /* 将队列Q的队头元素退队到x,并返回OK;*/ /* 若失败,则返回ERROR。 */ { if (Q.tag == 0 && Q.front==Q.rear) return ERROR; x=Q.elem[Q.front]; Q.front=(Q.front+1) % MAXQSIZE; return OK; }

/**********

11【题目】假设将循环队列定义为:以域变量rear

和length分别指示循环队列中队尾元素的位置和内 含元素的个数。试给出此循环队列的队满条件,并 写出相应的入队列和出队列的算法(在出队列的算 法中要返回队头元素)。 本题的循环队列CLenQueue的类型定义如下:

typedef struct { ElemType elem[MAXQSIZE]; int length; int rear; } CLenQueue;

**********/

Status EnCQueue(CLenQueue &Q, ElemType x) /* 将元素x加入队列Q,并返回OK;*/ /* 若失败,则返回ERROR。 */ { if (Q.elem==NULL || Q.length>=MAXQSIZE) return ERROR; Q.rear = (Q.rear+1) % MAXQSIZE; Q.elem[Q.rear]=x; Q.length++; return OK; } Status DeCQueue(CLenQueue &Q, ElemType &x) /* 将队列Q的队头元素退队到x,并返回OK;*/ /* 若失败,则返回ERROR。 */ { if (Q.elem==NULL ||Q.length==0) return ERROR; if(Q.rear+1>=Q.length) x=Q.elem[Q.rear+1-Q.length]; else x=Q.elem[MAXQSIZE-Q.length+Q.rear+1]; //x = Q.elem[(Q.length-Q,rear + MAXQSIZE) % MAXQSIZE]; --Q.length; return OK; } 12【题目】已知k阶斐波那契序列的定义为: f0=0, f1=0, …, fk-2=0, fk-1=1; fn=fn-1+fn-2+…+fn-k, n=k,k+1,…

试利用循环队列编写求k阶斐波那契序列中第 n+1项fn的算法。

本题的循环队列的类型定义如下:

typedef struct { ElemType *base; // 存储空间的基址 int front; // 队头位标 int rear; // 队尾位标,指示队尾元素的下一位置 int maxSize; // 最大长度 } SqQueue; **********/ long Fib(int k, int n) /* 求k阶斐波那契序列的第n项fn 要求:必须使用循环队列 */ { long sum = 0; int i, j,m; SqQueue a; a.maxSize = k+1; //注意循环队列由于判空判满的问题所以有一个元素空间没有用 a.base = (ElemType*)malloc(a.maxSize * sizeof(ElemType)); a.front = 0; a.rear = 0; if (n sum = 1; return sum; } //初始化该队列对应的斐波那契数列 do { a.base[a.rear] = 0; a.rear = (a.rear + 1) % a.maxSize; } while ((a.rear + 1) % a.maxSize != a.front); a.base[a.rear-1] = 1; cout v += a.base[j]; cout sum += a.base[j]; cout int i; if (A.elem[0]!=B.elem[0]) { if (A.elem[0] B.elem[0] ) return '>'; else if (A.length == B.length) return '='; } for (i=0;i if (i == B.length) return '='; else return '


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有