该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
能运行该C程序没有发现任何错误,但是没有成功体现全部功能,源代码如下:(我不会调试),请帮帮忙,谢谢!
#include
#include
#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 j;
if (L->length==L->listsize)/*顺序表已满,不能插入*/
{
printf("\t\t\t顺序表已满!\n");
return 0;
}
else
{
if(i<1||i>L->length+1)/*检查插入位置的合法性*/
{
printf("\t\t\t位置不合法!");
return 0;
}
else
{
for(j=L->length;j>=i;j--)/*顺序移动元素*/
{
L->elem[j+1]=L->elem[j];
}
L->elem[i]=x; /*新元素插入*/
L->length++;/*表长+1*/
return 1;/*插入成功,返回*/
}
}
}
int DeleteSeqList(SeqList* L, int i)
{
int j;
if(i<1 || i>L->length) /*检查删除位置的合法性*/
{
printf ("不存在第i个元素!\n");
return 0;
}
else
{
for(j=i;j<=L->length;j++)/*向上顺序移动元素*/
L->elem[j]=L->elem[j+1];
L->length--; /*表长-1*/
return 1; /*删除成功*/
}
}
int LenSeqList(SeqList* L) /* 返回顺序表L的长度*/
{
if(L->length == 0 )
{
printf("请检查线性表");
return(0);
}
else
printf("\t\t\t返回顺序表的长度:%d\n",L->length);
return 1;
}
int SearchSeqList(SeqList* L, DataType x) /*在线性表中查找值为x的数据元素*/
{
int j=1;
while(j <= L->length && L->elem[j] != x)
{
j++;
printf("\t\t\t输出x的值:%c");
}
if(j>L->length)
return(-1);
else
return j; //返回x所在位置的位序
}
DataType GetfromSeqList(SeqList* L, int i) /*返回线性表中的第i个元素的值*/
{
if(L->elem = NULL )
{
printf("请检查线性表");
return(-1);
}
else
if(i<1||i>L->length+1)
{
printf("请正确的输入i的值!");
return(0);
}
else
{
return(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()
{
char 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("%c",&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')
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");
}
}