C语言——结构体,线性表的链式存储

Python018

C语言——结构体,线性表的链式存储,第1张

结构体的数据类型是为了将不同数据类型,但相互关联的一组数据,组合成一个有机整体使用,就相当于是java中的一个对象中定义了一些不同的属性

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*/

}

定义和格式没仔细检查,编译未必通过,但原理是这样的,自己改改吧