一个顺序表的程序 急
#include <stdio.h>#include <stdlib.h>
#define LIST_INTSIZE 50
typedef char DataType; /*在此例中数据类型采用字符类型*/
typedef struct { DataType* elem; /*线性表的基地址*/
int length; /*线性表当前的长度*/
int listsize; /*线性表当前分配的存储容量*/
} SeqList;
int InitSeqList(SeqList* L)
{
L->elem=(DataType *)malloc((LIST_INTSIZE+1)*sizeof(DataType)); /*数组的0元素没有使用*/
if (L->elem==NULL)
{
printf("\t\t\t内存分配错误\n");
return 0;
}
L->length=0;
L->listsize=LIST_INTSIZE;
printf("\t\t\t内存分配成功\n");
return 1;
}
int InsertSeqList(SeqList* L, int i, DataType x)
{
int m;
if(i<1||i>(L->length+1))
{
printf("元素插入的位置不合法!");
}
if(L->length>L->listsize)
{
printf("顺序表已满,不能再插入!");
}
if(i<1&&i<L->length+1)
{
for(m=L->length;m>i;--m)
{
L->elem[m+1]=L->elem[m];
L->elem[i]=x;
}
printf("已经在顺序表的第%d个位置插入元素%c",i,x);
L->length++;
}
return 1;
}
int DeleteSeqList(SeqList* L, int i)
{
if(i<1||i>(L->length))
{
printf("删除位置%d不合理!",i);
}
else{
for(i;i<L->length+1;i++)
{
L->elem[i]=L->elem[i+1];
printf("已经删除了顺序表的第%d个位置的元素",i);
L->length=L->length-1;
}
}
return 1;
}
int LenSeqList(SeqList* L)
/* 返回顺序表L的长度*/
{ int n=0;
n=L->length;
printf("当前顺序表的表长为%d",n);
return 1;
}
int SearchSeqList(SeqList* L, DataType x)
/*在线性表中查找值为x的数据元素*/
{
int i=1;
while(i<=(L->length+1)&&L->elem[i]!=x)
i++;
if (i>L->length) return -1;
else return i;
}
DataType GetfromSeqList(SeqList* L, int i)
/*返回线性表中的第i个元素的值*/
{
return (L->elem[i]);
}
void ShowSeqList(SeqList* L)
{ int i;
printf("\n\t\t\t显示线性表的所有元素:");
if(L->length==0)
printf("\n\t\t\t顺序表为空!\n");
else
{
printf("\n\t\t");
for(i=1;i<=L->length;i++)
{ printf("\t%c",L->elem[i]);
}
}
}
/* 主函数 */
main()
{ int choice;
int i;
int j=1;
SeqList L;
DataType x;
while(j)
{ printf("\n\n\n\n");
printf("\t\t\t--线 性 顺 序 表--\n");
printf("\n\t\t\t************************************");
printf("\n\t\t\t* 1-------顺序表初始化 *");
printf("\n\t\t\t* 2-------插 入 *");
printf("\n\t\t\t* 3-------删 除 *");
printf("\n\t\t\t* 4-------求 表 长 *");
printf("\n\t\t\t* 5-------按 值 查找 *");
printf("\n\t\t\t* 6-------读取元素值 *");
printf("\n\t\t\t* 7-------显示线性表 *");
printf("\n\t\t\t* 0-------退 出 *");
printf("\n\t\t\t************************************\n");
printf("\t\t\t请选择菜单号(0--7):");
scanf("%d",&choice);getchar();
if(choice==1)
InitSeqList(&L);
else if (choice==2)
{ printf("\n\t\t\t请输入的位置i和数值x(输入格式:i,x):");
scanf("%d,%c",&i,&x);
InsertSeqList(&L, i, x);
}
else if (choice==3)
{ printf("\n\t\t\t请输入要删除元素的位序:");
scanf("%d",&i);
DeleteSeqList(&L, i);
}
else if (choice==4)
LenSeqList(&L);
else if (choice==5){
printf("\n\t\t\t请输入要查找的数值x:");
scanf("%c",&x);
SearchSeqList(&L,x);
}
else if (choice==6)
GetfromSeqList(&L, i);
else if (choice==7)
ShowSeqList(&L);
else if (choice==0)
{ j=0;
printf("\t\t\t程序结束!\n");}
else printf("\n\t\t\t输入错误!请重新输入!\n");
}
}
选择2插不进数据,表长也不会增加。。。怎么改正??