#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#define data 100
typedef struct L l;
typedef struct L
{
int a[data];
int b;
int c;
char name[data];
int age[data];
};
L student;
void f1(l *p,int n)
{
// if((p->a=(int *)malloc(n*sizeof(p->a)))==NULL)
//{
// printf(“内存申请错误!\n”);
// exit(-1);
// }
p->b=0;
p->c=n;
}
int f2(l *p,int i,char T,int w,int j)
{
int q;
if(p->c==p->b)
return -1;
if(j<0)
j=0;
if(j>p->b)
j=p->b;
for(q=p->b-1;q>=j;q–)
{
p->a[q+1]=p->a[q];
p->name[q+1]=p->name[q];
p->age[q+1]=p->age[q];
}
p->a[j]=i;
p->name[j]=T;
p->age[j]=w;
p->b++;
return 0;
}
void f3(l *p)
{
int q;
for(q=0;q<p->b;q++)
{printf(“学号:%d\n”,p->a[q]);
printf(“姓名:%c\n”,p->name[q]);
printf(“年龄:%d\n”,p->age[q]);
}
}
int f4(l *p,int i)
{
int q;
for(q=0;q<p->b;q++)
if(p->a[q]==i)
return q;
return -1;
}
int f5(l *p,int i)
{
int q,t;
for(q=0;q<p->b;q++)
if(p->a[q]==i)
break;
if(q<p->b)
{
for(t=q;t<p->b-1;t++)
p->a[t]=p->a[t+1];
p->b–;
return q;
}
return 0;
}
int f6(l *p,int j)
{
int q;
if(j<0||j>p->b)
{
printf(“位置错误!\n”);
return -1;
}
for(q=j;q<p->b-1;q++)
p->a[q]=p->a[q+1];
p->b–;
return 0;
}
int main()
{
l pp;
l *e;
int q,t;
int item;
int A,C;
char B;
printf(“元素地址为%d\t元素长度为%d\t元素个数为%d\n”,pp.a,pp.b,pp.c);
f1(&pp,data);
printf(“元素地址为%d\t元素长度为%d\t元素个数为%d\n”,pp.a,pp.b,pp.c);
for(;;)
{ printf(“1、插入元素\t2、查找元素\t3、删除指定元素\t4、删除指定元素位置\t0、结束\n”);
scanf(“%d”,&item);
if(item==1)
{
while(1)
{
printf(“请输入学号\n”);
fflush(stdin);
scanf(“%d”,&A);
if(A==0)
break;
printf(“请输入姓名\n”);
fflush(stdin);
scanf(“%s”,&B);
if(B==0)
break;
printf(“请输入年龄\n”);
fflush(stdin);
scanf(“%d”,&C);
if(C==0)
break;
printf(“请输入插入位置!\n”);
fflush(stdin);
scanf(“%d”,&t);
f2(&pp,A,B,C,t-1);
printf(“学生信息管理系统:\n”);
f3(&pp);
}
}
if(item==2)
{
while(1)
{
printf(“请输入查找元素值,输入0结束查找操作!\n”);
fflush(stdin);
scanf(“%d”,&q);
if(q==0)
break;
t=f4(&pp,q);
if(t<0)
printf(“没有找到满足条件的元素值!\n”);
else
printf(“找到满足条件的元素值,位置为%d\n”,t+1);
}
}
if(item==3)
{
while(1)
{
printf(“请输入删除元素值,输入0结束删除操作!\n”);
fflush(stdin);
scanf(“%d”,&q);
if(q==0)
break;
t=f5(&pp,q);
if(t<0)
printf(“没有找到符合条件的元素值!\n”);
else
{
printf(“找到满足条件的元素值,位置为%d”,t+1);
printf(“线性表为:\n”);
f3(&pp);
}
}
}
if(item==4)
{
while(1)
{
printf(“请输入删除元素位置,输入0结束删除操作!\n”);
fflush(stdin);
scanf(“%d”,&t);
if(t==0)
break;
q=f6(&pp,t);
if(q<0)
printf(“没有找到符合人条件的元素值!\n”);
else
{
printf(“找到符合人条件的元素值,位置为%d”,t+1);
printf(“线性表为:\n”);
f3(&pp);
}
}
}
if(item==0)
exit(0); }
return 0;
}
1
2
2
27
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#define STU_NUM 100
typedef struct L l;
struct L
{
int no[STU_NUM];
int b;
int c;
char name[STU_NUM][32];
int age[STU_NUM];
};
void init_info(l *p, int n)
{
p->b = 0;
p->c = n;
}
int insert_info(l *p, int no, char *T, int w, int j)
{
int i;
if(p->c == p->b)
return -1;
if(j < 0)
j = 0;
if(j > p->b)
j = p->b;
for(i = p->b-1; i >= j; i--)
{
p->no[i+1] = p->no[i];
strcpy(p->name[i+1], p->name[i]);
p->age[i+1] = p->age[i];
}
p->no[j] = no;
strcpy(p->name[j], T);
p->age[j] = w;
p->b++;
return 0;
}
void show_info(l *p)
{
int i;
for (i = 0; i < p->b; i++)
{
printf("学号:%d\n",p->no[i]);
printf("姓名:%s\n",p->name[i]);
printf("年龄:%d\n",p->age[i]);
}
}
int search_info(l *p,int i)
{
int q;
for(q=0;q<p->b;q++)
if(p->no[q] == i)
return q;
return -1;
}
int del_as_no(l *p, int no)
{
int i, j;
for (i = 0; i < p->b; i++)
if(p->no[i] == no)
break;
if (i < p->b)
{
for (j = i; j < p->b-1; j++) {
p->no[j]=p->no[j+1];
strcpy(p->name[j], p->name[j+1]);
p->age[j] = p->age[j+1];
}
p->b--;
return i;
}
return 0;
}
int del_as_idx(l *p, int idx)
{
int i;
if (idx < 0 || idx > p->b) {
printf("位置错误!\n");
return -1;
}
for (i = idx; i < p->b-1; i++) {
p->no[i] = p->no[i+1];
strcpy(p->name[i], p->name[i+1]);
p->age[i] = p->age[i+1];
}
p->b--;
return 0;
}
int main()
{
l pp;
int q,t;
int item;
int A,C;
char name[32];
printf("元素地址为%p\t元素长度为%d\t元素个数为%d\n", pp.no, pp.b, pp.c);
init_info(&pp, STU_NUM);
printf("元素地址为%p\t元素长度为%d\t元素个数为%d\n", pp.no,pp.b,pp.c);
for (;;) {
printf("1、插入元素\t2、查找元素\t3、删除指定元素\t4、删除指定元素位置\t0、结束\n");
scanf("%d", &item);
if(item==1)
{
while(1)
{
printf("请输入学号\n");
fflush(stdin);
scanf("%d", &A);
if(A == 0)
break;
printf("请输入姓名\n");
fflush(stdin);
scanf("%s", name);
if (strlen(name) <= 0)
break;
printf("请输入年龄\n");
fflush(stdin);
scanf("%d", &C);
if(C == 0)
break;
printf("请输入插入位置!\n");
fflush(stdin);
scanf("%d", &t);
insert_info(&pp, A, name, C, t-1);
printf("学生信息管理系统:\n");
show_info(&pp);
}
}
if(item == 2)
{
while(1)
{
printf("请输入查找元素值,输入0结束查找操作!\n");
fflush(stdin);
scanf("%d",&q);
if(q==0)
break;
t = search_info(&pp, q);
if(t < 0)
printf("没有找到满足条件的元素值!\n");
else
printf("找到满足条件的元素值,位置为%d\n",t+1);
}
}
if(item == 3)
{
while(1)
{
printf("请输入删除元素值,输入0结束删除操作!\n");
fflush(stdin);
scanf("%d",&q);
if(q==0)
break;
t = del_as_no(&pp, q);
if(t<0)
printf("没有找到符合条件的元素值!\n");
else
{
printf("找到满足条件的元素值,位置为%d",t+1);
printf("线性表为:\n");
show_info(&pp);
}
}
}
if(item==4)
{
while(1)
{
printf("请输入删除元素位置,输入0结束删除操作!\n");
fflush(stdin);
scanf("%d",&t);
if(t==0)
break;
q = del_as_idx(&pp,t);
if (q < 0) {
printf("没有找到符合人条件的元素值!\n");
} else {
printf("找到符合人条件的元素值,位置为%d",t+1);
printf("线性表为:\n");
show_info(&pp);
}
}
}
if(item==0)
exit(0); }
return 0;
}
函数使用f1,f2,f3…,本人估计你过段时间再看这部分代码你也不知道f1,f2,f3…表示啥?
代码写出来除了要实现对应的功能也是让别人看的,让别人去帮你看也要别人首先了解你的代码功能,但是使用这样的函数名,谁看了都费解。总之,变量名和函数名一定要做到见名知义,假如想继续编程,或走的更远建议遵循这条规则。
代码风格建议注意下,该加空格的要加空格,该回车的要回车。
name不能直接赋值,但是可以借助库函数实现,例如strcpy,strncpy等等
改了许多,暂不一一罗列了,请查看上面的代码,有问题可以继续提出来。