求帮助修改程序,实现顺序表的功能

#include <stdio.h>
#include <stdlib.h>
#define SIZE 100
typedef int DataType;
typedef struct
{
DataType items[SIZE];
int length;


}SqList;


int InitList(SqList *L);
int ListLength(SqList L);
int ListEmpty(SqList L);
int ListInsert(SqList *L,int pos,DataType item);
int ListDelete(SqList *L,int pos,DataType *item);
int Find(SqList L,DataType item);
int GetElem(SqList L,int pos,DataType *item);
int TraverseList(SqList L);


int main(void)
{
SqList h;
DataType item;
int arr[SIZE], pos, i, num,count = 0;
InitList(&h);


printf("---------顺序表----------\n");
printf("||--------------------------------主菜单-------------------------------||\n");
printf(" 1-初始化顺序表: ");
printf(" 2-插入一个元素: ");
printf(" 3-输出元素: ");
printf(" 4-删除元素: ");
printf(" 5-查找元素: \n\n");
printf(" 6-遍历顺序表: ");
printf(" 7-退出主程序 ");
printf("请输入命令代码:\n");
do{
printf("请输入操作类型:");
scanf("%d", &num);
if (num < 0 || num > 6)
{
continue;
}
switch(num)
{
case 1:
printf("请输入您要输入的数字(并以0结束):");
for (i = 0; i < SIZE; i++)
{
scanf("%d", &arr[i]);
if (arr[i] == 0)
{
break;
}
count++;
}
for (i = 0; i < count; i++)
{
if(!ListInsert(&h, i + 1, arr[i]))
{
printf("插入出错\n");
return 0;
}
}
TraverseList(h);
break;
case 2: 
printf("请输入你要插入的元素和位置");
scanf("%d %d", &item, &pos);
ListInsert(&h,pos,item); 
break;
case 3:
Find(h,item);
case 4: 
printf("请输入你要删除的元素");
scanf("%d", item);
ListDelete(&h,pos,&item); 
break;
case 5: 
Find(h,item); 
break;
case 6: 
TraverseList(h);
break;
case 7:
return 0;
}
}while(1);
return 0;
}
int InitList(SqList *L) 
{
L->length = 0;
return 1;
}


int ListLength(SqList L)
{
return L.length;
}


int ListEmpty(SqList L) 
{
if (L.length <= 0)
{
return 1;
}
else
{
return 0;
}
}


int ListInsert(SqList *L,int pos,DataType item) 
{
int i;
if (L->length >= SIZE)
{
printf("顺序表以满, 无法插入\n");
return 0;
}
if (pos <= 0 || pos > L->length)
{
printf("插入位置不合法\n");
return 0;
}
for (i = L->length - 1; i >= pos - 1; i--)
{
L->items[i + 1] = L->items[i];
}
L->items[pos - 1] = item;
L->length++;
return 1;
}


int ListDelete(SqList *L,int pos,DataType *item) 
{
int i;
if (ListEmpty(*L))
{
printf("顺序表为空\n");
return 0;
}
if (pos < 0 || pos > L->length)
{
printf("删除位置不合法\n");
return 0;
}
*item = L ->items[pos - 1];
for (i = pos; i < L->length; i++)
{
L->items[i - 1] = L->items[i];
}
L->length--;
return 1;
}


int Find(SqList L,DataType item)
{
int pos = 0;
if (ListEmpty(L))
{
printf("顺序表为空: ");
return 0;
}
while(pos < L.length && L.items[pos] != item) pos++;
if (pos < L.length) return pos + 1;
else return 0;
}


int GetElem(SqList L,int pos,DataType *item)
{
if(ListEmpty(L))return 0;
if (pos <= 0 || pos > L.length)
{
printf("位置信息输入不合法,请重新输入");
}
*item = L.items[pos - 1];
return 1;
}


int TraverseList(SqList L)
{
int i;
for(i = 0; i<L.length;i++) printf("%d\t", L.items[i]);
printf("\n");
return 1;
}
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值