C語言結構體
阿新 • • 發佈:2020-12-17
基本資料型別:
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;
}
}