数据结构子系统

这个子系统的switch嵌套怎么改啊 为什么建完表就直接到栈的子系统了   有大佬可以教我一下吗

#include<stdio.h>
#include<windows.h>
#define OK 1;
#define ERROR 0;
#define OVERFLOW -2;
#define MaxSize 10

typedef int ElemType;
typedef int Status;
// 线性表子系统实验
typedef struct 
{
    ElemType *elem;
    int length;
    int size;
}SqList;


//7初始化 
InitList(SqList &L)
{
    L.elem = (ElemType*)malloc(100*sizeof(ElemType));
    if(!L.elem)
    exit(-2);
    L.length=0;
    L.size=100;

}

//1建表 
Create(SqList &L,ElemType a[],int n)
{
    for(int i=0;i<n;i++)
    {
        L.elem[i]=a[i];
        L.length++;
    }
    printf("建表完成\n");
    return OK; 
}
//2插入
Insert(SqList &L,ElemType e,int i)//在位置i插入元素e 
{
    int j;
    if(i<1 ||i> L.length+1)//i的位置不合法
    {
        return ERROR;
    }    
    if(L.length >=L.size)// 表L的空间已满
    {
        ElemType *newbase=(ElemType *)realloc(L.elem,(L.size+10)*sizeof(ElemType)); //开辟新空间 
        if(!newbase)
        {
            exit(-2);
        }
        L.elem=newbase;
        L.size+=10;
     } 
     ElemType *q = &(L.elem[i-1]);//将表中第i个元素的地址传给指针q 
     for(ElemType *p=&L.elem[L.length-1];p>=q;--p)
     {
         *(p+1)=*p;
     }
     *q=e;
     ++L.length;
    printf("插入完成\n");
    printf("插入后的表为:\n");    
    for(int j=0 ;j<L.length; j++)
    {
        printf("%d",L.elem[j]);
    }
     return OK;             
 }
 
 
 //3删除
Delete(SqList &L)//删除i位置的元素 
 {    
    int z;
    printf("请输入要删除元素的位置:\n");
    scanf("%d",&z);
     if(z<1 ||z>L.length)
     return ERROR;
    ElemType *p=&(L.elem[z-1]);
    ElemType *q=L.elem+L.length-1 ;
    for(p; p<q; p++)
    {
        *p=*(p+1);
    }
    --L.length;
    printf("删除完成\n");
    printf("删除后的表为:\n");    
    for(int j=0 ;j<L.length; j++)
    {
        printf("%d",L.elem[j]);
    }
    return OK;
  } 
 
//4显示
Output(SqList L)
{
    printf("线性表中的元素为:\n");
    for(int i=0 ;i<L.length; i++)
    {
        printf("%d",L.elem[i]);

    }    
    printf("\n");
    return OK;
 } 
 
typedef struct {  //定义线性表数据项结构 
    int key;
    int otherinfo;
}Elemtype;

typedef struct{
    int length;//顺序表长度
    Elemtype *R;//顺序表的动态建立,R用于之后动态建立一块连续的存储空间,是建立存储空间的基地址
}SeqList;

//初始化线性表 
bool InitList(SeqList &T)
{
    T.R=(Elemtype *)malloc(sizeof(Elemtype)*MaxSize);//动态分配内存 
    if(!T.R)//检查是否成功给线性表 T分配空间
    {
        printf("分配空间失败");
        return false; 
    } 
    T.length=0;
    return true;
 } 

//根据输入的元素建立线性表 
bool CreatList(SeqList &T)
{
    int n;
    printf("请输入您想建立的线性表中的元素个数:\n");
    scanf("%d",&n);
    printf("请依次输入元素:\n");
    for(int i=0;i<n;i++)
    {
        scanf("%d",&T.R[i].key);//赋值
        T.length++; 
    } 
    return true;
 } 

//1顺序查找
int search1(SeqList T,int key)
{
    for(int i=0;i<=T.length;i++)
    {
        if(T.R[i].key==key)
        {
        return i+1; 
        }
    }
    return 0;
 } 

//二分查找
int search2(SeqList T,int key,int low,int high)
{
    int mid=(low+high)/2;
    if(T.R[mid].key==key)
    {
    return key;
    }
    else if(T.R[mid].key<key)
    {
    search2(T,key,mid+1,high); 
    }
    else if(T.R[mid].key>key)
    {
    search2(T,key,low,mid-1);
    } 
 } 

//二叉排序树结点定义
typedef struct BSTNode{ 
    int data;
    struct BSTNode *left;
    struct BSTNode *right;
};
 
//二叉树结点创建 
BSTNode *CreateTreeNode(int x)
{
    BSTNode *p = (BSTNode *)malloc(sizeof(BSTNode));
    p->data = x;
    p->left = NULL;
    p->right = NULL;
    return p;
}

//二叉排序树的构造

void Creat(BSTNode *&root,int str[],int n)
{
    root=NULL; 
    for(int i=0;i<n;i++) 
    {
// Insert(root,str[i]);
    } 
 } 
 
void Show(int result,int key)

{
    if(result==0)
    {
    printf("没有找到该元素\n");
    }
    else
    {
    printf("找到元素%d,在第%d位\n",key,result);
    }
}

void menu()
{
    printf("\t\t\t\t数据结构子系统  \n");
    printf("\t\t\t******************************\n");
    printf("\t\t\t*    1  线     性     表     *\n");
    printf("\t\t\t*    2         栈            *\n");
    printf("\t\t\t*    3  队            列     *\n");
    printf("\t\t\t*    4  二     叉     树     *\n");
    printf("\t\t\t*    5         图            *\n");
    printf("\t\t\t*    6  查            找     *\n");
    printf("\t\t\t*    7  排            序     *\n");
    printf("\t\t\t*    0  退            出     *\n");
    printf("\t\t\t******************************\n");
    printf("\t\t\t请输入菜单号(0-7):\n");

}

void menu_1()
{
    printf("\t\t\t\t   线性表子系统\n");
    printf("\t\t\t******************************\n");
    printf("\t\t\t*    1  建            表     *\n");
    printf("\t\t\t*    2  插            入     *\n");
    printf("\t\t\t*    3  删            除     *\n");
    printf("\t\t\t*    4  显            示     *\n");
    printf("\t\t\t*    0  返            回     *\n");
    printf("\t\t\t******************************\n");
    printf("\t\t\t请输入菜单号(0-4):\n");        
 } 
 
void menu_2()
{
    printf("\t\t\t\t   栈子系统\n");
    printf("\t\t\t******************************\n");
    printf("\t\t\t*    1  进            栈     *\n");
    printf("\t\t\t*    2  出            栈     *\n");
    printf("\t\t\t*    3  显            示     *\n");
    printf("\t\t\t*    4  数   制  转   换     *\n");
    printf("\t\t\t*    5  逆   波  兰   式     *\n");
    printf("\t\t\t*    6         图            *\n");
    printf("\t\t\t*    0  返            回     *\n");
    printf("\t\t\t******************************\n");
    printf("\t\t\t请输入菜单号(0-6):\n");    
    
}
void menu_3()
{
    printf("\t\t\t\t   队列子系统\n");
    printf("\t\t\t******************************\n");
    printf("\t\t\t*    1  进            队     *\n");
    printf("\t\t\t*    2  出            队     *\n");
    printf("\t\t\t*    3  读     队     头     *\n");
    printf("\t\t\t*    4  显            示     *\n");
    printf("\t\t\t*    5  双     向     队     *\n");
    printf("\t\t\t*    0  返            回     *\n");
    printf("\t\t\t******************************\n");
    printf("\t\t\t请输入菜单号(0-5):\n");    
 } 
void menu_4()
{
    printf("\t\t\t\t   树子系统\n");
    printf("\t\t\t******************************\n");
    printf("\t\t\t*    1  建  二   叉   树     *\n");
    printf("\t\t\t*    2  先  序   遍   历     *\n");
    printf("\t\t\t*    3  中  序   遍   历     *\n");
    printf("\t\t\t*    4  后  序   遍   历     *\n");
    printf("\t\t\t*    5  层  次   遍   历     *\n");
    printf("\t\t\t*    6  叶  结   点   数     *\n");
    printf("\t\t\t*    7  总  结   点   数     *\n");
    printf("\t\t\t*    8  树  的   深   度     *\n");
    printf("\t\t\t*    0  返            回     *\n");
    printf("\t\t\t******************************\n");
    printf("\t\t\t请输入菜单号(0-8):\n");    
 }
void menu_5()
{
    printf("\t\t\t\t   图子系统\n");
    printf("\t\t\t******************************\n");
    printf("\t\t\t*    1  建 立 邻 接 矩 阵     *\n");
    printf("\t\t\t*    2  深 度 优 先 遍 历     *\n");
    printf("\t\t\t*    3  广 度 优 先 遍 历     *\n");
    printf("\t\t\t*    0  返            回     *\n");
    printf("\t\t\t******************************\n");
    printf("\t\t\t请输入菜单号(0-3):\n");    
 } 
void menu_6()
{
    printf("\t\t\t\t   查找子系统\n");
    printf("\t\t\t******************************\n");
    printf("\t\t\t*    1  顺  序   查   找     *\n");
    printf("\t\t\t*    2  二  分   查   找     *\n");
    printf("\t\t\t*    3  二  叉  排 序 树     *\n");
    printf("\t\t\t*    4  建  排   序   树     *\n");
    printf("\t\t\t*    5  查  找   结   点     *\n");
    printf("\t\t\t*    6  插  入   结   点     *\n");
    printf("\t\t\t*    7  删  除   结   点     *\n");
    printf("\t\t\t*    8  中  序   输   出     *\n");
    printf("\t\t\t*    0  返            回     *\n");
    printf("\t\t\t******************************\n");
    printf("\t\t\t请输入菜单号(0-8):\n");    
 }  
void menu_7()
{
    printf("\t\t\t\t   排序子系统\n");
    printf("\t\t\t******************************\n");
    printf("\t\t\t*    1  数  据   输   入     *\n");
    printf("\t\t\t*    2  插  入   排   序     *\n");
    printf("\t\t\t*    3  希  尔   排   序     *\n");
    printf("\t\t\t*    4  冒  泡   排   序     *\n");
    printf("\t\t\t*    5  快  速   排   序     *\n");
    printf("\t\t\t*    6  选  择   排   序     *\n");
    printf("\t\t\t*    7  归  并   排   序     *\n");
    printf("\t\t\t*    8  堆     排     序    *\n");
    printf("\t\t\t*    0  返            回     *\n");
    printf("\t\t\t******************************\n");
    printf("\t\t\t请输入菜单号(0-8):\n");    
 }   
int main()
{
    int c,c1,c2,c3,c4,c5,c6,c7;
    SeqList T; 
    SqList sql; 
    BSTNode *root;
    int key,result; 
    menu();
//    while (1)
//    {
        scanf("%d",&c);
        system("cls");
        InitList(sql);
        switch(c){
        while(1)
          {            
            case 1:
                {
                    menu_1();
                    scanf("%d",&c1);    
                    system("cls");
                    switch (c1)
                    {
                        case 1:
                            {
                            ElemType a[]={1,2,3,4,5,6,7,8};    
                            Create(sql,a,8);
                            break;                                
                            }
                        case 2:
                            {
                            ElemType x ;
                            int y;
                            printf("请输入要插入的元素及其位置(中间用空格隔开):\n");
                            scanf("%d%d",&x,&y);
                            Insert(sql , x , y);                                
                            }break;
                        case 3:
                            {
                            Delete(sql );        
                            }break;
                        case 4:
                            {
                            Output(sql);        
                            }break;
                        case 0:
                            {
                                
                            }break;
                    }
/*                    if(c1==1)
                    {
                        ElemType a[]={1,2,3,4,5,6,7,8};    
                        Create(sql,a,8);
                        break; 
                        }
                    else if(c1==2)
                    {
                        ElemType x ;
                        int y;
                        printf("请输入要插入的元素及其位置(中间用空格隔开):\n");
                        scanf("%d%d",&x,&y);
                        Insert(sql , x , y);                        
                        }
                    else if(c1==3)
                    {
                        Delete(sql );
                        }
                    else if(c1==4)
                    {
                        Output(sql);
                        }
                    else if(c1==0);
                    {
                    //    menu();
                    
                        }
                    break;
                    }    */
//                }
            case 2:
                {
                menu_2();
                scanf("%d",&c2);
                system("cls");
                if(c2==0);
                {
                menu();    
                }    
                break;    
                }
            case 3:
                {
                    menu_1();
                    scanf("%d",&c3);
                    system("cls");
                    if(c3==0);
                    {
                    menu();    
                    }
                    break;
                }
            case 4:
                {
                    menu_4();
                    scanf("%d",&c4);
                    system("cls");
                    if(c4==0);
                    {
                    menu();    
                    }
                    break;
                }
            case 5:
                {
                    menu_5();
                    scanf("%d",&c5);
                    system("cls");
                    if(c5==0);
                    {
                    menu();    
                    }
                    break;
                }
            case 6:
                {
                    menu_6();
                    scanf("%d",&c6);
                    system("cls");
                    if(c6=1)
                    {
                    if(InitList(T)&&CreatList(T))
                    {
                        printf("创建成功\n");
                    }                        
                    printf("请输入要查找的关键字:\n");
                    scanf("%d",&key);
                    result=search1(T,key);
                    Show(result,key);
                    system("cls");
                     } 
                    if(c6=2)
                    {
                    if(InitList(T)&&CreatList(T))
                    {
                        printf("创建成功\n");
                    }                        
                    printf("请输入要查找的关键字:\n");
                    scanf("%d",&key);
                    result=search2( T, key, 1, T.length);
                    Show(result,key);                        
                    }
                    if(c6==0);
                    {
                    menu();    
                    }
                    break;
                }
            case 7:
                {
                    menu_7();    
                    scanf("%d",&c7);
                    system("cls");
                    if(c7==0);
                    {
                    menu();    
                    }
                    break;
                }
            case 0:
                {
                    printf("已退出系统!\n");
                }
                break;                
            }
    
     }
    return 0;
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值