C语言线性表基本操作求助

我编写的代码编译没有问题,但是运行老出错,求大神解答。。。代码在:(请将XXXXXX换成下面的数字)http://paste.ubuntu.com/XXXXXXX/768... 我编写的代码编译没有问题,但是运行老出错,求大神解答。。。
代码在:(请将XXXXXX换成下面的数字)
http://paste.ubuntu.com/XXXXXXX/
7680626
拜托了。。。
展开
 我来答
6969548s
2014-06-22 · 超过19用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:45.2万
展开全部
#include<stdio.h>
#include<stdlib.h>
# define MAXSIZE 100
# define OK 1
# define ERROR 0
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE];
int length;
}Sqlist;
int CreateList(Sqlist *L)//创建线性表
{
int i, n, num;
printf("请输入元素个数:");
scanf("%d", &n);
printf("请依次输入整数值:");
for (i = 1; i <=n; i++)//一共n个元素,=号
{
scanf("%d", &num);
L->data[i] = num;
L->length++;//长度加1
}
return OK;
}

int ListLength(Sqlist* L)//返回线性表长度
{
printf("线性表的长度为:%d", L->length);
return L->length;
}

int PrintList(Sqlist* L)//依次输出线性表
{
int i;
for (i = 1; i <= L->length; i++)
{
printf("%d\t", L->data[i]);
}
printf("\n");
return OK;
}

int InsertList(Sqlist *L, int i, ElemType e)//插入元素s
{
int k;
if (L->length == MAXSIZE )
return ERROR;
if (i<1 || i>L->length +1 )
return ERROR;
if (i <= L->length)
{
for (k = L->length; k >= i - 1; k--)//k--,下标从1开始则lengh位置已有元素,不应length-1
L->data[k + 1] = L->data[k];
}
L->data[i] = e;//i不减1
L->length++;
return OK;
}

int DeletList(Sqlist *L, int i)//删除元素
{
int k;
if (L->length == 0)//==
return ERROR;
if (i<1 || i>L->length)
return ERROR;
if (i <= L->length)
{
for (k = i; k < L->length; k++)
L->data[k] = L->data[k+1];//应该这样
}
L->length--;
return OK;

}

int GetElem(Sqlist* L, int i, ElemType* e)//用e返回线性表中第i个元素的值
{
if (L->length ==0 || i<1 || i>L->length)//==
return ERROR;
*e = L->data[i];//前面下标都是1开始,就不用-1了
return OK;
}

int MergeList(Sqlist* L1, Sqlist* L2, Sqlist *L3)//两个线性表求并集,结果放在L3里
{
int i, j, k;
i = 1;
j = 1;
k = 1;
while ((i <= L1->length) && (j <= L2->length))
{
if (L1->data[i] == L2->data[j])
{
L3->data[k] = L1->data[i];
i++;
j++;
}
else
if (L1->data[i] < L2->data[j])
{
L3->data[k] = L1->data[i];
i++;
}
else
{
L3->data[k] = L2->data[j];
j++;
}
k++;
}
if (i > L1->length)
for (i = j; i <= L2->length; i++)
{
L3->data[k] = L2->data[i];
k++;
}
else
for (j = i; j <= L1->length; j++)
{
L3->data[k] = L1->data[j];
k++;
}
L3->length = k - 1;
return OK;
}
void menu()
{
printf("\n");
printf(" *******************顺序线性表功能菜单*******************\n");
printf(" * 1:建立线性表 2:插入元素 *\n");
printf(" * 3: 删除元素 4:合并线性表 *\n");
printf(" * 5:打印线性表 6:查找特定元素 *\n");
printf(" * 7:线性表长度 8:退出 *\n");
printf(" ********************************************************\n");
printf(" 请输入你的选择:");
}
void main()
{
Sqlist L, L1, L2, L3;
ElemType e;
int i,n,flag;
char a;
L.length = 0;
//int CreateList(Sqlist *L);//函数原型
//int ListLength(Sqlist* L);
//int PrintList(Sqlist* L);
//int InsertList(Sqlist *L, int i, ElemType e);
//int DeletList(Sqlist *L, int i);
//int GetElem(Sqlist* L, int i, ElemType e);
//int MergeList(Sqlist L1, Sqlist L2, Sqlist *L3);
menu();
do
{
scanf("%d",&n);
if(n>=1&&n<=7)
{
flag=1;
break;
}
else
{
flag=0;
printf("您输入有误,请重新选择!");
}
}
while(flag==0);
while(flag==1)
{
switch (n)
{
case 1:
CreateList(&L);
PrintList(&L);
break;
case 2:
printf(" 请输入要插入的数据元素:");
scanf("%d", &e);
printf(" 请输入要插入的元素位置:");
scanf("%d", &i);
InsertList(&L, i, e);
break;
case 3:
printf(" 请输入要删除的元素位置:");
scanf("%d", &i);
DeletList(&L, i);
PrintList(&L);
break;
case 4:
printf(" 创建第一个顺序表");
CreateList(&L1);
printf(" 创建第二个顺序表");
CreateList(&L2);
PrintList(&L1);
PrintList(&L2);
MergeList(&L1, &L2, &L3);
PrintList(&L3);
break;
case 5:
PrintList(&L);break;//这里开始都忘了break
case 6:
printf("请输入查看元素序号:");
scanf("%d", &i);
GetElem(&L, i, &e);
printf("第%d个元素为%d", i, e);break;
case 7:
ListLength(&L);break;
case 8:
exit(0);
break;
default:
break;
}
getchar();
printf("\n");
printf("是否继续进行(y or n):\n");
scanf("%c",&a);
if(a=='y')
{
flag=1;
system("cls"); /*清屏*/
menu(); /*调用菜单函数*/
printf("请再次选择你需要操作的步骤(1--7):\n");
scanf("%d",&n);
printf("\n");
}

else
exit(0);

}
}
追问
谢谢帮助,但这样修改之后程序运行是还是一直显示菜单,如果选择了操作之后就显示是否继续那个函数,这样一直循环。。。。
追答
if(a=='y')
{
flag=1;
system("cls"); /*清屏*/
menu(); /*调用菜单函数*/
printf("请再次选择你需要操作的步骤(1--7):\n");
scanf("%d",&n);
printf("\n");
}
这部分不是你自己写的么,你这里的意思就是返回菜单呀。
如果继续函数的话,把//的三句删掉就行了。
if(a=='y')
{
flag=1;
system("cls"); /*清屏*/
menu(); /*调用菜单函数*/
// printf("请再次选择你需要操作的步骤(1--7):\n");
// scanf("%d",&n);
// printf("\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式