1. 程式人生 > 實用技巧 >C語言結構體

C語言結構體

基本資料型別:

int char float double 

構造資料型別:

陣列:

  • 相同型別元素的集合。
      學生:name      num       grade
(char name【】)(int grade【】)
       張三:zahngsan 80

結構體:

  • 把不同基本資料型別集合在一起;
    要進行型別定義;
  • 結構體資料的定義,輸入,輸出:
#include <stdio.h>
/*
 struct  結構體名
 {
    成員表列;
 };
 */
typedef struct birthday
{
    int y,m,d;
}BIR;
/*
 typedef int Intrrage;
*/
 typedef struct stu
{
    char name[10];
    int grade;
    BIR birthday;
} STU;
struct
{
    int a;
    float b;
}aa,bb,cc;
int main(){
    STU s={"li"};
    s.grade=234;
    s.birthday.d=12;
    s.birthday.m=12;
    s.birthday.y=2003;
}
/*
 int main()
{
    /*
    struct stu s={"zhang",80},t;
    printf("%s:%d\n",s.name,s.grade);
    */
    /*
    struct stu s,t;
    scanf("%s%d",s.name,&s.grade);
    printf("%s:%d\n",s.name,s.grade);
    */
   /*
    struct stu s,t[3]={{"aaa",10},{"bbb",20},{"ccc",30}},*ps;
    */
    
/*
 struct stu s,t[3],*ps;
    ps=&s;
    int i;
    for(i=0;i<=2;i++)
        scanf("%s%d",t[i].name,&t[i].grade);
    for(i=0;i<=2;i++)
        printf("%s:%d\n",t[i].name,t[i].grade);
  /*
    scanf("%s%d",s.name,&s.grade);
    printf("%s:%d\n",s.name,s.grade);
    printf("%s:%d\n",(*ps).name,(*ps).grade);
    printf("%s:%d\n",ps->name,ps->grade);
    */
    
}
  • 結構體的應用:(連結串列)
    連結串列:
    1.定義:
    由若干個節點構成的數字集,節點中存放了下一個結點的地址,連結串列中有一個頭指標指向第一個地址,最後一個指標為NULL
    2.分類:
    靜態連結串列;
    處理學生資料:
    |資訊| 姓名|成績|
    | ---- |---- | ----|
    |0|‘a’ |95|
    |1 |'b' |100|
    |2 |'c' |90|
    |3 |'d' |80|
    |4 |'e' |85|
    |5 |'f' |86|
    動態連結串列:
    3.操作:
/*
#include<stdio.h>
#define N 10
struct student
{
    int NO[10];
    char  name[8];
    float grade;
}STU[N];
int main(){
    int i,h;
    for(i=0;i<10;i++){
        scanf("%s",STU[i].name);
        scanf("%d",&STU[i].NO);
    }
}
*/
#include<stdio.h>
#include<stdlib.h>
struct stu
{
    int date;
    struct stu *next;
};
/*
int main(){
    struct stu s[6]={{},{},{},{},{},{}};
    s[0].next=&s[2];
    s[1].next=&s[0];
    s[2].next=&s[5];
    s[3].next=NULL;
    s[4].next=&s[3];
    s[5].next=&s[4];
    
    struct stu *p;
    p=&s[1];
    while(p){
        printf("%s:%d\n",p->name,p->grade)
        p=p->next;
    }
}
*/
int main(){
    struct stu *h,*p,*q = NULL;
    int a;
    h=NULL;
    scanf("%d",&a);
    while(a!=0)
    {//malloc開闢空間;
        //強制類性轉換        //說明開闢多大的空間
        p=(struct stu*)malloc(sizeof(struct stu));
        //calloc 可以開闢多塊空間;
        //realloc 對前邊的儲存空間進行擴充套件;
        p->date=a;
        if(h==NULL)
        {
            h=p;
            q=p;
        }else
        {
            q->next=p;
            q=p;
        }
        scanf("%d",&a);
    }
    p=h;
    while(p!=NULL)
    {
        printf("%d",p->date);
        p=p->next;
    }
}
#include<stdio.h>
#include<stdlib.h>
struct stu
{
    int date;
    struct stu *next;
};
int main(){
    struct stu *p,*h,*q;
    int a;
    h=NULL;
    scanf("%d",&a);
    while(a!=0)
    {
        p=(struct stu*)malloc(sizeof(struct stu));
        p->date=a;
        if(h==0)
        {
            h=p;
            q=p;
        }
        else
        {
            q->next=p;
            q=p;
        }
        scanf("%d",&a);
    }
    p->next=NULL;
    p=h;
    while(p!=NULL)
    {
        printf("%d",p->date);
        p=p->next;
    }
}