C程式設計--結構體+單向連結串列
阿新 • • 發佈:2018-12-05
連結串列
head指向第一個元素,第一個元素又指向第二個元素 … … 直到最後一個元素,該元素不再指向全體元素,它稱為“表尾”,它的地址部分放一個“NULL”(表示“空地址”),連結串列到此結束。
1. 建立一個簡單的靜態連結串列:
案例:如上圖所示的簡單鏈表,並輸出各節點中的資料
程式碼實現
#include<stdio.h>
struct Student{//宣告結構體
int num;
float score;
struct Student *next;
};
int main(){
struct Student a, b,c,*head,*p;
head=&a;
a.num=10101;
a.score=98.5;
a.next=&b;
b.num=10103;
b.score=90;
b.next=&c;
c.num=10107;
c.score=85;
c.next=NULL;
p=head;
do{
printf("%d,%5.1f\n",p->num,p->score);
p=p->next;
}while(p!=NULL);
return 0;
}
執行結果:
程式碼說明:
上述程式中,所有的結點都是在程式中定義的,不是臨時開闢的,也不能用完後釋放。這種連結串列成為“靜態連結串列”。
2. 建立一個動態連結串列(需要標頭檔案:<stdlib.h>):
案例:建立一個單向連結串列,並用函式實現 輸入、輸出 各節點中的資料
程式碼實現:
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct Student)
struct Student{
long num;
float score;
struct Student *next;
};
int n;//輸入的個數,定義為全域性變數
struct Student* creat(){//返回一個指向struct Student型別元素的指標,即返回頭指標
struct Student *head;
struct Student *p1,*p2;
n=0;
p1=p2=(struct Student *)malloc(LEN);
scanf("%ld %f",&p1->num,&p1->score);
head=NULL;
while(p1->num!=0){
n++;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(struct Student *)malloc(LEN);
scanf("%ld %f",&p1->num,&p1->score);
}
p2->next=NULL;
return head;
}
void print(struct Student *head){
struct Student *p;
printf("\nNow,Three %d records are:\n",n);
p=head;
if(head!=NULL){
do{
printf("%ld %5.1f\n",p->num,p->score);
p=p->next;
}while(p!=NULL);
}
}
int main(){
struct Student *head;
head=creat();
print(head);
return 0;
}
執行結果:
輸入函式:
struct Student* creat(){//返回一個指向struct Student型別元素的指標,即返回頭指標
struct Student *head;
struct Student *p1,*p2;
n=0;
p1=p2=(struct Student *)malloc(LEN);
scanf("%ld %f",&p1->num,&p1->score);
head=NULL;
while(p1->num!=0){
n++;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(struct Student *)malloc(LEN);
scanf("%ld %f",&p1->num,&p1->score);
}
p2->next=NULL;
return head;
}
輸出函式:
void print(struct Student *head){
struct Student *p;
printf("\nNow,Three %d records are:\n",n);
p=head;
if(head!=NULL){
do{
printf("%ld %5.1f\n",p->num,p->score);
p=p->next;
}while(p!=NULL);
}
}
注:本部落格知識點較為簡單。如想了解更多關於連結串列的知識,建議閱讀以下文章
1.https://blog.csdn.net/huangjh2017/article/details/73818062
2.https://www.cnblogs.com/maluning/p/7966875.html
3.https://blog.csdn.net/m_zhurunfeng/article/details/54809821
4. … …等等