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
    评论
C语言中,没有内置的ArrayList数据结构,但是我们可以通过使用指针和动态内存分配来实现类似ArrayList的功能。 下面是一个简单的示例代码,展示了如何在C语言中创建一个类似ArrayList数据结构: ```c #include <stdio.h> #include <stdlib.h> typedef struct { int* data; // 存储数据的数组 int size; // 当前存储的元素个数 int capacity; // 数组的容量 } ArrayList; // 初始化ArrayList void init(ArrayList* list) { list->data = NULL; list->size = 0; list->capacity = 0; } // 向ArrayList中添加元素 void add(ArrayList* list, int element) { if (list->size == list->capacity) { // 如果数组已满,则扩展数组的容量 int newCapacity = (list->capacity == 0) ? 1 : list->capacity * 2; int* newData = (int*)realloc(list->data, newCapacity * sizeof(int)); if (newData == NULL) { printf("内存分配失败\n"); return; } list->data = newData; list->capacity = newCapacity; } list->data[list->size] = element; list->size++; } // 获取ArrayList中指定索引的元素 int get(ArrayList* list, int index) { if (index < 0 || index >= list->size) { printf("索引越界\n"); return -1; } return list->data[index]; } // 释放ArrayList占用的内存 void freeArrayList(ArrayList* list) { free(list->data); list->data = NULL; list->size = 0; list->capacity = 0; } int main() { ArrayList list; init(&list); add(&list, 10); add(&list, 20); add(&list, 30); printf("元素个数:%d\n", list.size); printf("第一个元素:%d\n", get(&list, 0)); printf("第二个元素:%d\n", get(&list, 1)); printf("第三个元素:%d\n", get(&list, 2)); freeArrayList(&list); return 0; } ``` 这段代码演示了如何使用指针和动态内存分配来创建一个类似ArrayList数据结构。你可以通过调用`add`函数向ArrayList中添加元素,通过调用`get`函数获取指定索引的元素。在使用完ArrayList后,记得调用`freeArrayList`函数释放占用的内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

瑾怀轩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值