Cat. 2015-09-29 07:31 采纳率: 0%
浏览 1631
已结题

跪求大神 c++词频 排序

You say that you love rain,
but you open your umbrella when it rains.
You say that you love the sun,
but you find a shadow spot when the sun shines.
You say that you love the wind,
but you close your windows when wind blows.
This is why I am afraid,
because you say that you love me too。
将上述文字 利用c++堆栈 指针 或者数据库 进行词频统计
以及词频大小排序

  • 写回答

4条回答 默认 最新

  • Cat. 2015-09-29 07:30
    关注

    一、实验目的

    设计并实现链表、栈、队列基本操作,为编译原理的学习打下基础。

    二、实验要求

    实现线性表、栈、队列创建、查找、插入、删除等基本操作。

    三、实验步骤

    1.参考数据结构

    //结点

    typedef struct{

    struct Node *next;
    
        struct Node *pre;
    
    int data;
    

    }Node;

    //链表头结点

    struct

    {

    struct Node* head;
    
    struct Node* tail;
    
    int count;
    

    } List;

    typedef List Stack;//使用链表作为堆栈的底层实现结构

    typedef List Queue;//使用链表作为队列的底层实现结构

    2.操作

    2.1 表

    2.1.1. 初始化

    void list_init(struct List* root){

        root->count = 0;
    
    root->head = NULL;
    
    root->tail = NULL;
    

    }

    2.1.2 插入

    //插入到队列末尾

    void push_back(Node* node, List* list){

    if(list->head == NULL){//如果list头结点为空

                list->head = list->tail = node;
    
                node->next = node->pre = NULL;               
    
                list->count++;
    
                return;
    
        }
    
        node->next = NULL;
    
        node->pre = list->tail;
    
        list->tail->next = node;
    
        list->tail = node;
    
        list->count++;
    

    }

    //插入到队列头部

    void push_front(Node node, List list){

        if(list->head == NULL){
    
                list->head = list->tail = node;
    
                node->next = node->pre = NULL;               
    
                list->count++;
    
                return;
    
        }
    
        node->pre= NULL;
    
        node->next = list->head;
    
        list->head->pre = node;
    
        list->head = node;
    
        list->count++;
    

    }

    //插入到位置locate

    int insert(Node *node, List *list, int locate){

        //异常处理
    

    if(locate > list->count || locate < 0)return -1;

        //插入到头部
    
        if(locate == 0){push_front(node, list); return 1;}
    
        //插入到尾部
    

    if(locate == list->count){push_back(node, list); return 1;}

        //其它
    
        int curValue = -1;
    
    
    
        //查找并插入到cur的前面
    
        Node *cur = list->head;
    
        while(++curValue < locate)cur = cur->next;
    
    
    
        //插入
    
        node->next = cur;
    
        node->pre = cur->pre;       
    
        cur->pre->next = node;
    
        cur->pre = node;
    

    //容量加1

    list->count++;

        return 1;
    

    }

    2.1.3 查找

    Node* search(Node *node, List *list, int &locate){

    //返回相应的头结点,并记录该结点的位置到locate中

        locate = 0;
    
        Node *cur = list->head;
    
        while(cur != NULL && cur->data != node->data){cur = cur->next; locate++;}
    
    
    
        if(cur == NULL) locate = - 1;
    
        return cur;
    

    }

    2.1.4. 删除

    int remove(List *list, int locate){

        //异常
    
        if(locate >= list->count || locate < 0)return -1;
    
    
    
        if(locate == 0){//头部
    
                Node *p = list->head->next;       
    
                free(list->head);
    
                p->pre = NULL;
    
                list->head = p;               
    
        } else if(locate == list->count - 1){//尾部
    
                Node *p = list->tail->pre;               
    
                free(list->tail);
    
                p->next = NULL;
    
                list->tail = p;               
    
        } else{//其它
    
                //查找并保存到cur中
    

    int curValue = -1;

                Node *cur = list->head;
    
                while(++curValue < locate)cur = cur->next;
    
    
    
                cur->pre->next = cur->next;
    
                cur->next->pre = cur->pre;
    
    
    
                free(cur);
    
        }
    

    list->count--;

        return 1;
    

    }

    2.2. 堆栈操作

    2.2.1 初始化

    void stack_init(Stack *s){

        list_init((List*)s);
    

    }

    2.2.2 压栈

    void push(struct Node* node, Stack* s){

        push_front(node, (List*)s);
    

    }

    2.2.3 出栈

    Node* pop(Stack* s){

        Node *node = s->head;
    
        if(s->head->next != NULL)
    
                s->head = s->head->next;
    
        return node;
    

    }

    2.2.4 获得栈顶

    Node* get_top_stack(struct Node* node, Stack* s){

        return s->head;
    

    }

    2.3. 堆栈操作

    2.3.1. 初始化队列

    void queue_init(Queue *q){

        list_init((List*)q);
    

    }

    2.3.2. 入队列

    void in_queue(struct Node* node, Queue* q){

        push_back(node, (List*)q);
    

    }

    2.3.3. 出队列

    Node* out_queue(Queue* q){

        Node *node = q->head;
    
        if(q->head->next != NULL)
    
                q->head = q->head->next;
    
        return node;
    

    }

    2.3.4. 获得队列头

    Node* get_first_queue(struct Node* node, Queue* q){

        return q->head;
    

    }

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算