#include<stdio.h>
#define MixSize 50
typedef struct
{
int data[MixSize];
int Length;
}sqList;
void InitList(sqList *a);//声明初始化函数
void showList(sqList a);//显示函数
void GetListlength(sqList a ); //获取链表长度
void InsertList(sqList *a , int b ,int position) ; // 插入元素
void DeleteList(sqList * a,int position); //删除链表中第position位置的值
void Findposition(sqList a , int b); //查找b元素在数组中a的位置,函数直接输出位置信息
bool FindEqual(sqList a, int b); //查找b元素在a中是否存在,如果存在返回true,不存在返回false
int main()
{
sqList list ;
int i;
for(int n = 0; n<=10; n++)
{
printf("数组链表的操作\n");
printf("1创建一个链表\n");
printf("2获取链表长度\n");
printf("3输出链表\n");
printf("4插入一个数值进链表,需要输入 数值 以及位置\n");
printf("5删除第几个节点\n");
printf("6请输入查找的元素,直接返回元素在数组的位置\n");
scanf("%d",&i);
switch(i)
{
case 1:
{
;
InitList(&list);
break;
}
case 2:
{
GetListlength(list);
break;
}
case 3:
{
showList(list);
break;
}
case 4:
{
int b ,position;
printf("请输入插入的位置");
scanf("%d",&position);
printf("请输入插入的元素");
scanf("%d",&b);
InsertList(&list , b , position);
break;
}
case 5:
{
int position;
printf("请输入删除元素的位置");
scanf("%d",&position);
DeleteList(&list,position);
}
case 6:
{
int k;
printf("请输入要查找的元素");
scanf("%d",&k);
Findposition(list , k);
}
} //switch的括号
}//for循环的符号
return 0;
}
void InitList(sqList *a) //链表初始化
{
int n ;
printf("请输入长度\n");
scanf("%d",&n);
(*a).Length = n;
int i;
printf("请输入各个元素数值");
for(i = 0 ; i < n ; i++ )
{
printf("请输入第");
printf("%d",(i+1));
printf("个元素的数值\n");
scanf("%d",&((*a).data[i]));
}
}
void showList(sqList a) //显示链表
{
for(int i = 0; i < a.Length; i++)
{
printf("%d",a.data[i]);
printf("\t");
}
}
void GetListlength(sqList a )
{
printf("链表的长度为%d",a.Length);
}
void InsertList(sqList *a , int b ,int position) //第一个元素存在 0的位置,所以插入小心
{
int k = a->Length ; //获取链表a的长度,如果长度是5,则最后一个元素存在4的位置
//链表插入,所有插入元素后面的元素,均向后移一位
for(k ; k>=position ; k--)
{
a->data[k] = a->data[k-1];
}
a->data[position - 1] = b;
a->Length++;//插入完元素千万别忘记把长度加1,否则输出少元素
}
void DeleteList(sqList * a,int position) //删除元素,要把后面的元素前移
{
int k = a->Length;
for(position ;position < k; position++)
{
a->data[position-1] =a->data[position];
}
(a->Length)--;
}
void Findposition(sqList a , int b)
{
for(int i = 0; i<a.Length; i++)
{
if(a.data[i] == b)
{
printf("要查找的元素%d在链表的%d位置\t",b,(i+1));
}
}
}
bool FindEqual(sqList a, int b)
{
int i = 0;
while((a.data[i] != b) || i < a.Length )
i++; //如果一直没找到,i的值lengh
if( i >= a.Length )
return false;
return true;
}
#define MixSize 50
typedef struct
{
int data[MixSize];
int Length;
}sqList;
void InitList(sqList *a);//声明初始化函数
void showList(sqList a);//显示函数
void GetListlength(sqList a ); //获取链表长度
void InsertList(sqList *a , int b ,int position) ; // 插入元素
void DeleteList(sqList * a,int position); //删除链表中第position位置的值
void Findposition(sqList a , int b); //查找b元素在数组中a的位置,函数直接输出位置信息
bool FindEqual(sqList a, int b); //查找b元素在a中是否存在,如果存在返回true,不存在返回false
int main()
{
sqList list ;
int i;
for(int n = 0; n<=10; n++)
{
printf("数组链表的操作\n");
printf("1创建一个链表\n");
printf("2获取链表长度\n");
printf("3输出链表\n");
printf("4插入一个数值进链表,需要输入 数值 以及位置\n");
printf("5删除第几个节点\n");
printf("6请输入查找的元素,直接返回元素在数组的位置\n");
scanf("%d",&i);
switch(i)
{
case 1:
{
;
InitList(&list);
break;
}
case 2:
{
GetListlength(list);
break;
}
case 3:
{
showList(list);
break;
}
case 4:
{
int b ,position;
printf("请输入插入的位置");
scanf("%d",&position);
printf("请输入插入的元素");
scanf("%d",&b);
InsertList(&list , b , position);
break;
}
case 5:
{
int position;
printf("请输入删除元素的位置");
scanf("%d",&position);
DeleteList(&list,position);
}
case 6:
{
int k;
printf("请输入要查找的元素");
scanf("%d",&k);
Findposition(list , k);
}
} //switch的括号
}//for循环的符号
return 0;
}
void InitList(sqList *a) //链表初始化
{
int n ;
printf("请输入长度\n");
scanf("%d",&n);
(*a).Length = n;
int i;
printf("请输入各个元素数值");
for(i = 0 ; i < n ; i++ )
{
printf("请输入第");
printf("%d",(i+1));
printf("个元素的数值\n");
scanf("%d",&((*a).data[i]));
}
}
void showList(sqList a) //显示链表
{
for(int i = 0; i < a.Length; i++)
{
printf("%d",a.data[i]);
printf("\t");
}
}
void GetListlength(sqList a )
{
printf("链表的长度为%d",a.Length);
}
void InsertList(sqList *a , int b ,int position) //第一个元素存在 0的位置,所以插入小心
{
int k = a->Length ; //获取链表a的长度,如果长度是5,则最后一个元素存在4的位置
//链表插入,所有插入元素后面的元素,均向后移一位
for(k ; k>=position ; k--)
{
a->data[k] = a->data[k-1];
}
a->data[position - 1] = b;
a->Length++;//插入完元素千万别忘记把长度加1,否则输出少元素
}
void DeleteList(sqList * a,int position) //删除元素,要把后面的元素前移
{
int k = a->Length;
for(position ;position < k; position++)
{
a->data[position-1] =a->data[position];
}
(a->Length)--;
}
void Findposition(sqList a , int b)
{
for(int i = 0; i<a.Length; i++)
{
if(a.data[i] == b)
{
printf("要查找的元素%d在链表的%d位置\t",b,(i+1));
}
}
}
bool FindEqual(sqList a, int b)
{
int i = 0;
while((a.data[i] != b) || i < a.Length )
i++; //如果一直没找到,i的值lengh
if( i >= a.Length )
return false;
return true;
}
版权声明:本文为s673709215原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。