概述
这个子系统的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("tttt数据结构子系统 n");
printf("ttt******************************n");
printf("ttt* 1 线 性 表 *n");
printf("ttt* 2 栈 *n");
printf("ttt* 3 队 列 *n");
printf("ttt* 4 二 叉 树 *n");
printf("ttt* 5 图 *n");
printf("ttt* 6 查 找 *n");
printf("ttt* 7 排 序 *n");
printf("ttt* 0 退 出 *n");
printf("ttt******************************n");
printf("ttt请输入菜单号(0-7):n");
}
void menu_1()
{
printf("tttt 线性表子系统n");
printf("ttt******************************n");
printf("ttt* 1 建 表 *n");
printf("ttt* 2 插 入 *n");
printf("ttt* 3 删 除 *n");
printf("ttt* 4 显 示 *n");
printf("ttt* 0 返 回 *n");
printf("ttt******************************n");
printf("ttt请输入菜单号(0-4):n");
}
void menu_2()
{
printf("tttt 栈子系统n");
printf("ttt******************************n");
printf("ttt* 1 进 栈 *n");
printf("ttt* 2 出 栈 *n");
printf("ttt* 3 显 示 *n");
printf("ttt* 4 数 制 转 换 *n");
printf("ttt* 5 逆 波 兰 式 *n");
printf("ttt* 6 图 *n");
printf("ttt* 0 返 回 *n");
printf("ttt******************************n");
printf("ttt请输入菜单号(0-6):n");
}
void menu_3()
{
printf("tttt 队列子系统n");
printf("ttt******************************n");
printf("ttt* 1 进 队 *n");
printf("ttt* 2 出 队 *n");
printf("ttt* 3 读 队 头 *n");
printf("ttt* 4 显 示 *n");
printf("ttt* 5 双 向 队 *n");
printf("ttt* 0 返 回 *n");
printf("ttt******************************n");
printf("ttt请输入菜单号(0-5):n");
}
void menu_4()
{
printf("tttt 树子系统n");
printf("ttt******************************n");
printf("ttt* 1 建 二 叉 树 *n");
printf("ttt* 2 先 序 遍 历 *n");
printf("ttt* 3 中 序 遍 历 *n");
printf("ttt* 4 后 序 遍 历 *n");
printf("ttt* 5 层 次 遍 历 *n");
printf("ttt* 6 叶 结 点 数 *n");
printf("ttt* 7 总 结 点 数 *n");
printf("ttt* 8 树 的 深 度 *n");
printf("ttt* 0 返 回 *n");
printf("ttt******************************n");
printf("ttt请输入菜单号(0-8):n");
}
void menu_5()
{
printf("tttt 图子系统n");
printf("ttt******************************n");
printf("ttt* 1 建 立 邻 接 矩 阵 *n");
printf("ttt* 2 深 度 优 先 遍 历 *n");
printf("ttt* 3 广 度 优 先 遍 历 *n");
printf("ttt* 0 返 回 *n");
printf("ttt******************************n");
printf("ttt请输入菜单号(0-3):n");
}
void menu_6()
{
printf("tttt 查找子系统n");
printf("ttt******************************n");
printf("ttt* 1 顺 序 查 找 *n");
printf("ttt* 2 二 分 查 找 *n");
printf("ttt* 3 二 叉 排 序 树 *n");
printf("ttt* 4 建 排 序 树 *n");
printf("ttt* 5 查 找 结 点 *n");
printf("ttt* 6 插 入 结 点 *n");
printf("ttt* 7 删 除 结 点 *n");
printf("ttt* 8 中 序 输 出 *n");
printf("ttt* 0 返 回 *n");
printf("ttt******************************n");
printf("ttt请输入菜单号(0-8):n");
}
void menu_7()
{
printf("tttt 排序子系统n");
printf("ttt******************************n");
printf("ttt* 1 数 据 输 入 *n");
printf("ttt* 2 插 入 排 序 *n");
printf("ttt* 3 希 尔 排 序 *n");
printf("ttt* 4 冒 泡 排 序 *n");
printf("ttt* 5 快 速 排 序 *n");
printf("ttt* 6 选 择 排 序 *n");
printf("ttt* 7 归 并 排 序 *n");
printf("ttt* 8 堆 排 序 *n");
printf("ttt* 0 返 回 *n");
printf("ttt******************************n");
printf("ttt请输入菜单号(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;
}
}
最后
以上就是迷你雨为你收集整理的数据结构子系统的全部内容,希望文章能够帮你解决数据结构子系统所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复