ArrayList(c语言),arraylistc语言
分享于 点击 19400 次 点评:13
ArrayList(c语言),arraylistc语言
#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);
}
相关文章
- 暂无相关文章
用户点评