#2
word1232016-10-06 16:39
|
程序代码:
#include<stdio.h>
#include<malloc.h>
#define TURE 1
#define ERROR 0
#define MAXSIZE 100
typedef struct {
int elem[MAXSIZE];
int last;
}SqList;
void InitList(SqList *L,int e)
{
L->last=e-1;
}//组建
int InsertList(SqList *L,int i,int e)
{
int k;
if(i<1||i>L->last+2)
{
printf("插入不符合\n");
return ERROR;
}
if(L->last>=MAXSIZE-1)
{
printf("线性表已满\n");
return ERROR;
}
for(k=L->last;k>=i-1;k--)
{
L->elem[k+1]=L->elem[k];
}
e=L->elem[i-1];
L->last++;
return TURE;
}//插入
int DeleteList(SqList *L,int i,int *e)
{
int k;
if(i<1||i>L->last+1)
{
printf("不合法\n");
return ERROR;
}
*e=L->elem[i-1];
for(k=i;k<=L->last;k++)
{
L->elem[k-1]=L->elem[k];
}
L->last--;
return TURE;
}//删除
int SearchList(SqList L,int e)
{
int i=0;
while(i<=L.last&&L.elem[i]!=e)
i++;
if(i<=L.last)
{
return i+1;
}
else
return ERROR;
}
//查找
void menu()
{
printf("第一步首先建立一个线性表\n");
printf("1 建立\n");
printf("2 插入\n");
printf("3 删除\n");
printf("4 查找\n");
printf("5 遍历输出\n");
printf("6 退出\n");
}
int main()
{
int i,e;
int num,location,length,number;
int *data;
SqList *L;
data=(int *)malloc(sizeof(int));
menu();
while(1)
{
printf("请输入你的序号\n");
scanf("%d",&num);
switch(num)
{
case 1:
L=(SqList *)malloc(sizeof(SqList));
printf("请输入线性表的长度\n");
scanf("%d",&length);
InitList(L,length);
printf("请依次输入线性表的长度\n");
for(i=0;i<length;i++)
{
scanf("%d",&number);
L->elem[i]=number;
}
printf("插入成功\n");
break;
case 2:
printf("请输入你要插入的数值和位置\n");
scanf("%d %d",&e,&location);
if(InsertList(L,location,e)==TURE)
printf("插入成功\n");
else
printf("插入失败\n");
break;
case 3:
printf("请输入你要删除的节点\n");
scanf("%d",&i);
if(DeleteList(L,i,data))
printf("删除成功,你所删除的节点的值是%d\n",*data);
else
printf("删除失败\n");
break;
case 4:
printf("请输入你要查找的数值\n");
scanf("%d",&e);
location=SearchList(*L,e);
printf("你所查找的是%d个节点数\n",location);
break;
case 5:
for(i=0;i<=L->last;i++)
{
printf("%d ",L->elem[i]);
}
break;
case 6:
return 0;
}
}
printf("\n");
return 0;
}
#include<malloc.h>
#define TURE 1
#define ERROR 0
#define MAXSIZE 100
typedef struct {
int elem[MAXSIZE];
int last;
}SqList;
void InitList(SqList *L,int e)
{
L->last=e-1;
}//组建
int InsertList(SqList *L,int i,int e)
{
int k;
if(i<1||i>L->last+2)
{
printf("插入不符合\n");
return ERROR;
}
if(L->last>=MAXSIZE-1)
{
printf("线性表已满\n");
return ERROR;
}
for(k=L->last;k>=i-1;k--)
{
L->elem[k+1]=L->elem[k];
}
e=L->elem[i-1];
L->last++;
return TURE;
}//插入
int DeleteList(SqList *L,int i,int *e)
{
int k;
if(i<1||i>L->last+1)
{
printf("不合法\n");
return ERROR;
}
*e=L->elem[i-1];
for(k=i;k<=L->last;k++)
{
L->elem[k-1]=L->elem[k];
}
L->last--;
return TURE;
}//删除
int SearchList(SqList L,int e)
{
int i=0;
while(i<=L.last&&L.elem[i]!=e)
i++;
if(i<=L.last)
{
return i+1;
}
else
return ERROR;
}
//查找
void menu()
{
printf("第一步首先建立一个线性表\n");
printf("1 建立\n");
printf("2 插入\n");
printf("3 删除\n");
printf("4 查找\n");
printf("5 遍历输出\n");
printf("6 退出\n");
}
int main()
{
int i,e;
int num,location,length,number;
int *data;
SqList *L;
data=(int *)malloc(sizeof(int));
menu();
while(1)
{
printf("请输入你的序号\n");
scanf("%d",&num);
switch(num)
{
case 1:
L=(SqList *)malloc(sizeof(SqList));
printf("请输入线性表的长度\n");
scanf("%d",&length);
InitList(L,length);
printf("请依次输入线性表的长度\n");
for(i=0;i<length;i++)
{
scanf("%d",&number);
L->elem[i]=number;
}
printf("插入成功\n");
break;
case 2:
printf("请输入你要插入的数值和位置\n");
scanf("%d %d",&e,&location);
if(InsertList(L,location,e)==TURE)
printf("插入成功\n");
else
printf("插入失败\n");
break;
case 3:
printf("请输入你要删除的节点\n");
scanf("%d",&i);
if(DeleteList(L,i,data))
printf("删除成功,你所删除的节点的值是%d\n",*data);
else
printf("删除失败\n");
break;
case 4:
printf("请输入你要查找的数值\n");
scanf("%d",&e);
location=SearchList(*L,e);
printf("你所查找的是%d个节点数\n",location);
break;
case 5:
for(i=0;i<=L->last;i++)
{
printf("%d ",L->elem[i]);
}
break;
case 6:
return 0;
}
}
printf("\n");
return 0;
}
谁能帮我看看,执行插入的时候怎么不符合常理呢?