struct 结构体类型名{
数据类型 数据项1;
数据类型 数据项2;
.....
}
例如:
struct Data{
int year
int month
int day
}
间接定义法:先定义结构体类型,再定义结构体变量
struct Data data
直接定义法:在定义结构体类型的同时,定义结构体变量
struct Data{
int year
int month
int day
}data
结构体变量.成员 ,其中通过成员运算符‘.’逐个访问其成员。
结构体变量={初始表};
结构体数组的每一个元素,都是结构体类型数据,均包含结构体类型的所有成员。
struct std_student students[3]={
{.....}
{}
{}
}
结构体变量在内存中的起始地址称为结构体变量的指针。
struct Data data={2019,3,4}
struct Data *p=&data
printf("%d",p->year)
一般指针变量printer指向结构体变量var:
var.成员
pointer->成员
(*pointer).成员
线性链表是线性表的链式存储结构,是一种物理存储单元上的非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现,因此,哎存储线性表中的数据元素的时候,一方面要存储数据元素的值,另一方面要存储各数据元素之间的逻辑关系,因此,将每一个节点分为两部分:数据域和指针域。
单链表的基本操作:创建,检索,插入,删除,修改。
struct 结构体名{
数据成员表;
struct 结构体名 *指针变量名;
};
struct student{
long num
char name[20]
int score
struct student *next
}
利用malloc函数向系统申请分配链表节点的存储空间,返回存储区的首地址。
p=(struct student*)malloc(sizeof(struct student));
需要使用free(p)来释放
线性表的基本操作:
结构体:
struct student{
int data
struct student *next
}
struct student stu2[5],stu1
初始化单链表:
int Initiate(struct student *s){
if((s=(struct student*)malloc(sizeof(struct student)))==NULL){
return 0
}
s->next=NULL
}
单链表的插入(后插):
main(){
struct student *s=&stu1
struct student *p=&stu2
int i
Initiate(s)
for(i=0i<5i++){
Initiate(p)
(p+i)->data=i
(p+i)->next=s->next
s->next=(p+i)
}
for(i=0i<5i++){
printf("%d",p[i].data)
}
}
结果:
单链表删除:
如果要删除线性表h中的第i个节点,首先要找到第i个节点并让指针p指向其前驱的第i-1个节点,然后删除第i个节点并释放被删除节点。
(p+1)->next=(p+1)->next->next
free((p+2))
fwrite(stup,sizeof(STUINFO),1,fp)肯定会出错..stup是链表结构体类型. fwrite参数不对
链表节点定义.应该定义一个用来存储从文件读入数据的buf
写成
fwrite(stup.buf, 256, 1, fp)
呵呵 人家说的对的 就用数组 财富值没关系 我看能不能帮到你int main()
{ int n[4][4]={0,0.1,0.2,0.3,1,11,12,13,2,10,9,12,3,12,14,16}
/*这就是把这个表格以数组形式给定义了*/
int m
int find(int a,int b)/*定义根据a,b的值输出对应的m值的函数*/
{ scanf("d% d%",a,b)/*输入a,b的值,格式可能不对*/
int p1
int p2
int i
int m1
for(i=1i<4i++) /*找对应的的行值*/
{ if(n[0][i]==a)
p1=i
}
for(i=1i<4i++)/*找对应的列值*/
{ if(n[i][0]==b)
p2=i
}
m1=n[p1][p2]/*根据行列值来定m的值*/
return m1
}
m=find(int a,int b)/*调用这个函数*/
printf("d%",m)/*输出M*/
}
定义和格式没仔细检查,编译未必通过,但原理是这样的,自己改改吧