美文网首页
[数据结构]广义表的建立与基本操作 解题报告

[数据结构]广义表的建立与基本操作 解题报告

作者: vouv | 来源:发表于2017-03-26 14:28 被阅读0次

Problem Description

采用"头尾法”存储广义表,实现以下广义表的操作:

1.Status CreateGList( GList &L, char *S ) // 根据字符串 S 表示的广义表内容建立广义表数据结构;
2.GList GetHead( GList L) // 取表头运算
3.GList GetTail( GList L) // 取表尾运算
4.void DestroyGList( GList &L) // 销毁广义表 L
5.void PrintGList( GList L) // 显示广义表 L 内容

程序运行时,首先输入一个广义表,表中的原子是小写字母。随后可以交替输入取表头或取表尾指令(分别用 1 和 2 表示),取的结果替代当前广义表,并释放相应的资源(需将释放资源信息输出)。当广义表是空或是原子时,程序停止运行。

例:(下面的黑体为输入)

((a,()),c,d)
generic list: ((a,()),c,d)
1
destroy tail
free list node
generic list: (a,())
2
free head node
free list node
generic list: (())
1
destroy tail
free list node
generic list: ()


测试输入

(a,(b,(c,d)),e,f)
2
1
2
1
1

测试输出

generic list: (a,(b,(c,d)),e,f)
free head node
free list node
generic list: ((b,(c,d)),e,f)
destroy tail
free list node
generic list: (b,(c,d))
free head node
free list node
generic list: ((c,d))
destroy tail
free list node
generic list: (c,d)
destroy tail
free list node
generic list: c

AcCode

//
//  main.cpp
//  广义表的建立与基本操作
//
//  Created by jetviper on 2017/3/26.
//  Copyright © 2017年 jetviper. All rights reserved.
//

#include <stdio.h>
#include<string.h>
void GetTail(char *str){
    int List_lenth = strlen(str);
    int deep = 0;
    int endIndex;
    for(int i = 1;i<List_lenth;i++){
        
        if(deep>0){
            if(str[i] == '('){
                deep++;
                continue;
            }
            else if(str[i] == ')'){
                deep--;
                continue;
            }
            else continue;
            
        }
        
        else {
            if(str[i]=='('){
                deep++;
                continue;
            }
            else if(str[i] == ','){
                endIndex = i;
                break;
            }
            else if(i == List_lenth-1){
                str[1] = ')';
                str[2] = '\0';
                return;
            }
            else continue;
        }
        
    }
    for(int i = 1;i<=List_lenth-endIndex;i++){
        str[i] = str[i+endIndex];
    }
    str[List_lenth - endIndex + 1] = '\0';
    
    return;
    
}
void GetHead(char *str){
    int List_lenth = strlen(str);
    int deep = 0;
    int endIndex;
    char tmp[100];
    int k =0;
    for(int i = 1;i<List_lenth;i++){
        
        if(deep>0){
            if(str[i] == '('){
                tmp[k] = str[i];
                k++;
                deep++;
                continue;
            }
            else if(str[i] == ')'){
                tmp[k] = str[i];
                k++;
                deep--;
                continue;
            }
            else {
                tmp[k] = str[i];
                k++;
                continue;
            }
            
            
        }
        
        else {
            if(str[i]=='('){
                tmp[k] = str[i];
                k++;
                deep++;
                continue;
            }
            else if(str[i] == ','){
                break;
            }
            else if(i == List_lenth-1){
                break;
            }
            else {
                tmp[k] = str[i];
                k++;
                continue;
            }}
        
    }
    for(int j=0;j<k;j++)str[j] = tmp[j];
    str[k] = '\0';
    
    return;
}
int main() {
    char str[1000];
    int choice;
    scanf("%s",&str);
    printf("generic list: %s\n",str);
    
    while(1){
        if(strcmp(str,"()")==0||str[1]=='\0')break;
        
        scanf("%d",&choice);
        
        switch(choice){
            case 1:{
                GetHead(str);
                printf("destroy tail\nfree list node\ngeneric list: %s\n",str);
                break;
            }
            case 2:{
                GetTail(str);
                printf("free head node\nfree list node\ngeneric list: %s\n",str);
                break;
            }
                
                
                
        }
        
        
        
        
    }
    
    
    return 0;
}

相关文章

  • [数据结构]广义表的建立与基本操作 解题报告

    Problem Description 采用"头尾法”存储广义表,实现以下广义表的操作: 1.Status Cre...

  • [数据结构]树的建立与基本操作 解题报告

    Problem Description 在本实验中,程序的输入是一个表示树结构的广义表。假设树的根为 root ,...

  • 广义表输入与输出

    理解广义表: 完整代码: glist.h 建立广义表: 其他操作: 输出结果:

  • 广义表

    广义表的定义 广义表是线性表的推广,是一种非线性的数据结构,也有人称其为列表。广义表的实现主要应用递归,通过广义表...

  • 深入Python数据结构(一)——list

    1. 前言 列表是Python中最基本的数据结构。类似于数据结构中的广义表[?]。列表是最常用的Python数据类...

  • 数据结构(广义表)

    1. 广义表的定义 广义表简称表,它是线性表的推广。一个广义表是n(n>=0)个元素的一个有限序列,当n=0时称为...

  • #数据结构#—广义表

    广义表 广义表,又称列表,也是一种线性存储结构。同数组类似,广义表中既可以存储不可再分的元素,也可以存储广义表,记...

  • java自定义构造二叉树及其遍历

    首先:二叉树的建立 首先,我们采用广义表建立二叉树(关于广义表的概念,请查看百科的介绍:http://baike....

  • 栈和队列—什么是栈

    栈和队列是两种重要的数据结构 从数据结构角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子...

  • 栈和队列—什么是队列

    栈和队列是两种重要的数据结构 从数据结构角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子...

网友评论

      本文标题:[数据结构]广义表的建立与基本操作 解题报告

      本文链接:https://www.haomeiwen.com/subject/vmqkottx.html