ArrayList(c语言)

#include "stdio.h"

struct List
{
    int elem[100];
    int length ;
};
//函数声明
 List PopList(List list1);
 List CreatList();
 void PrintList(List list1);
 List MergeList(List list1,List list2);
 List InsertList(List list1,int i ,int number);
 List DeleteList(List list1 ,int i);
  bool isContain(List list1 , int num);

/*建立顺序表*/
List CreatList()
{
  List list;
  int i =0;
  printf("请输入顺序表(输入“0”结束): \n");
      while(list.elem [i] !=0)
      { i++;
        scanf("%d",&list.elem[i]);
              
      }
    list.length=i;
    list=PopList(list);
    return list;

}

//冒泡排序
List PopList(List list1){
    for(int i=2 ;i<list1.length ;i++)
    {
        for(int j =1 ;j<i;j++)
        {
            if(list1.elem[j]>list1.elem[i])
            {
                int a=list1.elem[j];
                list1.elem[j]=list1.elem[i];
                list1.elem[i]=a;
            }
        }
    }
 return list1;
}

//顺序表的输出方法
 void PrintList(List list1)
 {       
     for(int j =1 ;j<list1.length;j++)
     {
        printf("  %d  ",list1.elem[j]);          //打印表中单个元素

     }
     printf("\n");
 }
//实现线性表的合并方法
 List MergeList(List list1,List list2){
     List listC; listC.length=1;
     for(int i=1;i<list1.length;i++)
     {
         if(!isContain(listC,list1.elem[i]))        //判断是否存在
         {
            listC.elem[listC.length] = list1.elem[i]; //不存在时存入该元素
             listC.length++;
         }
     }
     for(int j=1;j<list2.length;j++)
     {
         if(!isContain(listC,list2.elem[j]))
         {
            listC.elem[listC.length] = list2.elem[j];
             listC.length++;
         }
     }
    listC =PopList(listC);
    return listC;
}

 //判断是否包含此元素
 bool isContain(List list1 , int num){
     for(int i=1;i<list1.length;i++)
     {
         if(list1.elem[i]==num)
             return true;
     }
     return false;

 }

 //实现线性表的插入操作
 List InsertList(List list1,int i ,int number)
 {
     int j;
     if(i<=0||i>list1.length)
         printf("给定插入下标错误");
     else
     {
         for(j=list1.length;j>=i;j--)            //循环查找给定下标位置
             list1.elem[j+1]=list1.elem[j];     
        
         list1.elem[i] =number;                   //将给定元素放入指定下标
         list1.length=list1.length+1;             //将线性表长度加一
     }
    // PrintList(list1); //打印线性表
     return list1;

 }

 //实现线性表的删除功能操作
 List DeleteList(List list1 ,int i)
 {
     int j;
     if(i<=0||i>list1.length)
         printf("给定插入下标错误");
     else{
         for(j=i; j<list1.length;j++)
             list1.elem[j]=list1.elem[j+1];
         list1.length--;
     }

     return list1;

 }

 //*****************主方法**************************//
 
  void main()
 {
     List ListA ,ListB ,ListC;
     int i,y,cord;
     do{
           printf("\n  /*********** 主菜单*********/   \n");
           printf("        1   建立线性表 \n");
           printf("        2   插入一个元素(请先完成操作1) \n");
           printf("        3   删除一个元素(请先完成操作1) \n");
           printf("        4   合并线性表  (请先完成操作1)\n");        
           printf("        5   退出   \n");
           printf("---------------------------");
           printf("请输入你的选择(1,2,3,4,5) \n");
           scanf("%d",&cord);
          switch(cord)
           {
            case 1: {
                printf("请输入线性表ListA: \n");
                ListA=CreatList();
                printf("ListA:  ");
                PrintList(ListA);
                printf("请输入线性表ListB: \n");
                ListB=CreatList();
                printf("ListB:  ");
                PrintList(ListB);
                    break;}
            case 2:{
                printf("请选择你要插入的数组,listA按“1”,listB按“2”:\n");
                int n;
                scanf("%d",&n);
                if(n==1){
                    printf("ListA: ");
                    PrintList(ListA);
                    printf("请输入你要插入的位置及插入元素:格式为(位置+空格+插入元素):\n");
                    scanf("%d %d",&i,&y);
                    ListA=InsertList(ListA ,i,y);
                    printf("ListA: ");
                    PrintList(ListA);
                break;
                }
                if(n==2){
                    printf("ListB: ");
                    PrintList(ListB);
                    printf("请输入你要插入的位置及插入元素:格式为(位置+空格+插入元素):\n");
                    scanf("%d %d",&i,&y);
                    ListB=InsertList(ListB ,i,y);
                    printf("ListB: ");
                    PrintList(ListB);
                    break;
                }
                printf("输入错误!");
                break;}
            case 3 :{
                    printf("请选择你要操作删除的线性表,listA按“1”,listB按“2”:\n");
                int n;
                scanf("%d",&n);
                if(n==1){
                    printf("ListA: ");
                    PrintList(ListA);
                    printf("请输入你要删除元素的位置:\n");
                    scanf("%d",&i);
                    ListA=DeleteList(ListA ,i);
                    printf("ListA:");
                    PrintList(ListA);
                    break;
                        }
                if(n==2){
                    printf("ListB: ");
                    PrintList(ListB);
                    printf("请输入你要删除元素的位置:\n");
                    scanf("%d",&i);
                    ListB=DeleteList(ListB ,i);
                    printf("ListB:");
                    PrintList(ListB);
                    break;            
                        }
                printf("输入错误!");
                break;
                }
            case 4 :{
                printf("合并线性表:\n");
                printf("ListA: ");
                PrintList(ListA);
                printf("ListB: ");
                PrintList(ListB);
                ListC = MergeList(ListA,ListB);
                printf("合并后的线性表:");
                 PrintList(ListC);
                break;}
            case 5 : return;
                
                    
          }
                   
           }while(cord<=5);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑾怀轩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值