话都在代码里
#include <stdio.h>//动态数组的使用
#include <stdlib.h>//为了用建立结构体
#include <windows.h>//清屏操作函数
#define max 20
typedef struct try1
{
int data[max];//最大长度
int longer;//数组实际长度
}try1;
//定义了try1的结构体指针。
int locate_try1(try1 * f, int x);
int locate_try1(try1* f, int x)
{
int i = 0;
for (i = 0; i < f->longer ; i++)
{
if (f->data[i] == x)
printf("成功找到");
break;
}
printf("位置在%d号", i + 1);//数组从0开始,但长度longer从1开始,所以。。。。
if (i >= f->longer)//;longer是从从1开始的,所以f->longer=20,1最多到20
printf("\n没找到%d", x);
return 1;//此处return 1没有实际用途。
}
int init_try1(try1 * f);//如果是int *i "try1 *" 类型的实参与 "int *" 类型的形参不兼容 Projectboos C
int init_try1(try1* f)
{
f->longer = 0;//把他变为空。
return 1;
}
int insert_try1(try1*l,int a,int c);//要插入东西怎么办冷。要从输入信息看
// 数组名 插入位置 插入数据
//要判断是否还能插入(虽然前面已经清空),插入位置是否合理,毕竟要按顺序插入,前面不能有空格。
int insert_try1(try1* f, int a, int c)
{
int j=0;
if (f->longer >= max)//实际长度已经到了20,满了
{
printf("插不了了\n");
return 0;
}
else
if (a > f->longer && a < 0)
{
printf("插入位置不对\n");
return 0;
}
// printf("\n开始插入\n");
for (j = f->longer - 1; j >= a - 1; j--)//一定要>=
{
f->data[j + 1] = f->data[j];//最后一次循环吧j=a-1的位置空出来了
}
f->data[a - 1] = c;
f->longer++;
return 1;
}
int display_try1(try1*f);
int display_try1(try1* f)
{
int i;
for (i = 0; i < f->longer; i++)
printf("\n%d", f->data[i]);
return 1;
}
int delete_try1(try1*f,int k);
int delete_try1(try1* f, int k)
{
;
int j;
if ((k < 1) || (k > f->longer))
{
printf("删除位置不正确");
return 0;
}
for (j =k; j < f->longer; j++)
{
f->data[j - 1] = f->data[j];
}
f->longer--;
return 1;
}
int main()
{
try1 l; //try1的一个具体的应用体。
int num=0, j, x,y,z, k; //不同的变量有利于逐步跟踪。
init_try1(&l); //清空,在此传入l的地址给try1结构体类型的指针。
insert_try1(&l, 1, 5); //插入
insert_try1(&l, 2, 5); //插入
insert_try1(&l, 3, 6); //插入
insert_try1(&l, 4, 7); //插入
insert_try1(&l, 5, 1); //插入
while (1)//插入元素55671
{
printf("\n当前顺序如下\n\n\n");
display_try1(&l);//display:显示
printf("\n*****************************************************");
printf("\n查找元素输入1");
printf("\n插入元素到指定位置输入2");
printf("\n删除某一元素输入3");
printf("\nreturn程序输入0 ");
printf("\n+++++++++++++++++++++++++++++++++++++++++++++++++++++");
printf("\n请输入对应菜单号\n");
scanf_s("%d", &num);
switch (num)//用switch——csae结构清楚明了。
{
case 1:
printf("输入查找元素");
scanf("%d", &x);
j = locate_try1(&l, x);//把结构体的地址,赋值给结构体类型指针。
break;
case 2:
printf("请输入插入元素位置");
scanf("%d", &y);
printf("请输入插入元素值");
scanf("%d", &z);
j = insert_try1(&l, y, z);
if (j != 0)//不一定插入成功
{
printf("插入后排序如下");
display_try1(&l);//输出
}
printf("\n");
break;
case 3:
printf("\n删除元素");
printf("请输入删除元素的位置");
k = 1;
scanf("%d", &k);
j = delete_try1(&l, k);
if (j != 0)
{
printf("\n插入后顺序表如下");
display_try1(&l);
printf("\n\n");
}
break;
case 4:
system("cls"); //system("cls"); 是一个实现清屏的操作。
break;
case 0:
{
exit(0);//exit 函数的作用是:直接使进程停止运行,清除其使用的内存空间,并清除其在内核的各种数据结构
break;
}
default:
{
printf("输入有误");
}
}
}
return 0;
}