代码下的雨 2021-10-05 17:11 采纳率: 50%
浏览 66
已结题

如何以以下代码,完成通讯录(姓名,电话号码,QQ号)的建立、记录插入,删除和数据浏览功能?

#include <stdio.h>
#define MaxSize 5
typedef int ElemType; //设置顺序表元素为int类型
typedef struct
{ ElemType data[MaxSize]; //存放顺序表的元素
int length; //顺序表的实际长度
} SqList; //顺序表类型声明
void InitList(SqList &L) //初始化顺序表L
{
L.length=0;
}
void DestroyList(SqList L) //销毁顺序表L
{
}
int GetLength(SqList L) //求长度
{
return L.length;
}
int GetElem(SqList L,int i,ElemType &e) //求第i个元素
{ if (i<1 || i>L.length) //无效的i值
return 0;
else
{ e=L.data[i-1];
return 1;
}
}
int Locate(SqList L,ElemType x) //查找第一个x元素的位置
{ int i=0;
while (i<L.length && L.data[i]!=x)
i++; //查找第1个值为x的元素
if (i>=L.length)
return(0); //未找到返回0
else
return(i+1); //找到后返回其逻辑序号
}
int InsElem(SqList &L,ElemType x,int i) //插入x作为第i个元素
{ int j;
if (i<1 || i>L.length+1) //无效的参数i
return 0;
for (j=L.length;j>=i;j--) //将位置为i的元素及之后的元素后移
L.data[j]=L.data[j-1];
L.data[i-1]=x; //在位置i处放入x
L.length++; //顺序表长度增1
return 1;
}
int DelElem(SqList &L,int i) //删除第i个元素
{ int j;
if (i<1 || i>L.length) //无效的参数i
return 0;
for (j=i;j<L.length;j++) //将位置为i的元素之后的元素前移
L.data[j-1]=L.data[j];
L.length--; //顺序表长度减1
return 1;
}
void DispList(SqList L) //输出顺序表
{ int i;
if(L.length>0)
{
printf("当前顺序表中的元素为:");
for (i=0;i<L.length;i++)
printf("%d ",L.data[i]);
}
else
printf("顺序表已空");
printf("\n");
}
void CreateList(SqList &L,ElemType a[],int n) //整体创建顺序表L
{
int i,k=0; //k累计顺序表L中的元素个数
for (i=0;i<n;i++)
{
L.data[k]=a[i]; //向L中添加一个元素
k++; //L中元素个数增1
}
L.length=k; //设置L的长度
}

int menu(){
int i=0;
printf("1.逐个插入元素创建链表\n");
printf("2.整体创建顺序表\n");
printf("3.退出\n");
scanf(" %d",&i);
return i;
}

int menu1(){
int i=0;
printf("1.插入元素\n");
printf("2.输出顺序表\n");
printf("3.获取第i个元素\n");
printf("4.查找第一个值为x元素的位置\n");
printf("5.删除第i元素\n");
printf("6.退出\n");
scanf(" %d",&i);
return i;
}

void menu2(SqList &L){

int i=0,x=0,chack=0,result=0;
ElemType e;

       while(chack!=6){
          chack=menu1();//选择功能
          result=0;
         switch(chack){
            case 1:
                printf("输入你需要插入的元素");                 
                scanf(" %d",&x);
                printf("输入你需要插入的位置");
                scanf(" %d",&i);
                if(L.length>=MaxSize){
                    printf("顺序表已满\n");
                    break;
                }
                InsElem(L,x,i);            //在数组末尾插入元素i
                break;
            case 2:
                DispList(L);//1.输出链表
                break;
            case 3:    
                printf("输入你需要获取的第i个元素:\n");
                scanf(" %d",&i);
                result=GetElem(L,i,e);//2.获取第i个元素
                if(result==1){
                printf("  第%d个元素:%d\n",i,e);
                }else
                   printf("  第%d个元素不存在\n",i);   
                break;
            case 4:  
                printf("输入你要查找的x元素:\n");
                scanf("  %d",&e);
                result=Locate(L,e);
                if(result!=0){
                    printf("  元素%d是第%d个元素\n",e,Locate(L,e),result);    //3.查找第一个x元素的位置
                }else
                        printf("  元素%d不存在\n",e);    //3.查找第一个x元素的位置
                break;
            case 5: 
                printf("输入你需要 删除第i个元素:\n");
                scanf(" %d",&i);
                result=DelElem(L,i);
                if(result==1){
                printf("  删除第%d个元素\n",i);//4.删除第i个元素
                }else
                        printf("  第%d个元素不存在\n",i);   
                break;
            case 6: 
                printf("销毁L\n");
                DestroyList(L);
                return;
            default:printf("无该选项\n");
           }
         }

}
void main() //主函数
{ int i=0;
int chack=0;
int x=0;
ElemType e;

SqList L;
int a[]={2,5,4,1,9};
int n=sizeof(a)/sizeof(a[0]);
 
while(chack!=3){
    chack=menu();//选择创建顺序表的方式
    switch(chack){
    case 1:
           InitList(L);            //初始化顺序表L
           printf("输入需要插入多少个的元素:\n");
           scanf(" %d",&x);   
           if(x>MaxSize){
               printf("超出顺序表长度%d\n",MaxSize);
              break;
           }
           else{
               printf("输入需要插入的元素:\n");
          
               for(i=1;i<=x;i++){
            
                scanf(" %d",&e);
                InsElem(L,e,i);            //插入元素1
              }
              menu2(L);
              return;//直接退出
           }
           break;
    case 2:
           printf("  整体创建L\n");
           CreateList(L,a,n);
           menu2(L);
           return;//直接退出
    default:printf("无该选\n");
    }
   }

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月13日
    • 创建了问题 10月5日

    悬赏问题

    • ¥15 python中yolov8pose
    • ¥20 uniapp移动端使用nvue页面的recycle-list组件,列表总数为五百多条,在下滑过程中,应用经常闪退
    • ¥15 MATLAB中CNN语音识别报错
    • ¥15 并网逆变器怎么改离网
    • ¥500 有没有谁可以破解 kml 格式的指标公式、有偿!
    • ¥15 关于我在docker容器里重新打开文件但是一直失败的问题
    • ¥30 layui怎么实现子窗口修改完成后,用原来查询条件刷新父页面
    • ¥15 perl解释器装上之后如何使用
    • ¥20 ctf find_fake_fast错位偏移
    • ¥15 pycharm无法启动打开