开发者社区> 问答> 正文

求高手做数据结构与算法(C++)

线性表:做一个菜单,具有插入,删除,分解,逆转的功能,

展开
收起
知与谁同 2018-07-22 16:50:22 2717 0
3 条回答
写回答
取消 提交回答
  • 用C++的话,标准库std::list 它不香吗?

    2020-03-23 17:40:58
    赞同 展开评论 打赏
  • 154782365
    2019-07-17 22:54:11
    赞同 展开评论 打赏
  • TA有点害羞,没有介绍自己...
    //自己好好看看,不理解的即时问
    #include <stdio.h>
    #include <malloc.h>
    typedef int KeyType;
    typedef char InfoType[10];
    typedef struct node //记录类型
    {
    KeyType key; //关键字项
    InfoType data; //其他数据域
    struct node *lchild,*rchild; //左右孩子指针
    } BSTNode;
    int InsertBST(BSTNode *&p,KeyType k)
    {
    if (p==NULL) //原树为空, 新插入的记录为根结点
    {
    p=(BSTNode *)malloc(sizeof(BSTNode));
    p->key=k;
    p->lchild=p->rchild=NULL;
    return 1;
    }
    else if (k==p->key) //树中存在相同关键字的结点,返回0
    return 0;
    else if (k<p->key)
    return InsertBST(p->lchild,k); //插入到*p的左子树中
    else
    return InsertBST(p->rchild,k); //插入到*p的右子树中
    }
    BSTNode *CreateBST(KeyType A[],int n) //返回BST树根结点指针
    {
    BSTNode *bt=NULL; //初始时bt为空树
    int i=0;
    while (i<n)
    {
    InsertBST(bt,A[i]); //将关键字A[i]插入二叉排序树T中
    i++;
    }
    return bt; //返回建立的二叉排序树的根指针
    }
    void DispBST(BSTNode *bt) //使用广义表的方式,输出一棵排序二叉树
    {
    if (bt!=NULL)
    { printf("%d",bt->key);
    if (bt->lchild!=NULL || bt->rchild!=NULL)
    { printf("("); //有孩子结点时才输出(
    DispBST(bt->lchild); //递归处理左子树
    if (bt->rchild!=NULL) printf(","); //有右孩子结点时才输出,
    DispBST(bt->rchild); //递归处理右子树
    printf(")"); //有孩子结点时才输出)
    }
    }
    }

    BSTNode *SearchBST(BSTNode *bt,KeyType k)
    {
    if (bt==NULL || bt->key==k) //递归终结条件
    return bt;
    if (k<bt->key)
    return SearchBST(bt->lchild,k); //在左子树中递归查找
    else
    return SearchBST(bt->rchild,k); //在右子树中递归查找
    }

    void main()
    {
    BSTNode *bt,*p,*f;
    int n=9;
    KeyType a[]=;
    bt=CreateBST(a,n);
    printf("BST:");
    DispBST(bt);
    printf("\n");
    }
    2019-07-17 22:54:11
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载