真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++培訓(xùn):C語言鏈接表分析

C++培訓(xùn)之前有同學(xué)再問C語言鏈接表怎么破?今天小編把這個知識點給大家分享出來,有疑問的可以多看看!

成都創(chuàng)新互聯(lián)于2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站建設(shè)、網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元筠連做網(wǎng)站,已為上家服務(wù),為筠連各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220

C++培訓(xùn):C語言鏈接表分析

相信學(xué)了c語言的人對鏈表或多或少有了解,鏈表也是數(shù)據(jù)結(jié)構(gòu)的重要內(nèi)容,今天就來聊聊最簡單的單向動態(tài)鏈表的建立與輸出。首先要了解什么是鏈表,鏈表是程序設(shè)計中一種重要的動態(tài)數(shù)據(jù)結(jié)構(gòu),是動態(tài)地進(jìn)行存儲分配的一種結(jié)構(gòu)。其中動態(tài)主要表現(xiàn)在元素位置可以變化,即隨意刪除隨意插入等;元素個數(shù)可增可減,不像數(shù)組聲明后長度就固定不變了。這就想起前段時間有人在群里問怎么刪除素組中任意一個元素,如果沒有鏈表剛開始學(xué)感覺就會無從下手了,這里有段代碼大家可以看看:

#include

int main()

{

int a[6]={1,2,3,4,5,6};

int n,i,j;

printf("輸入要刪除的數(shù):");

scanf("%d",&n);

for(i=0;i<6;i++)

if(a[i]==n)

{

for(j=i;j<6-1;j++)

a[j]=a[j+1];

}

for(i=0;i<6-1;i++)

printf("%d\n",a[i]);

return 0;

}

運行結(jié)果如下:

C++培訓(xùn):C語言鏈接表分析

是使數(shù)組元素從被刪除位置后面依次前移一位,然而最后一個元素依然存在,大家可以自己動手試試,這樣并沒有節(jié)約內(nèi)存,然而鏈表刪除就不同了。所謂動態(tài)通俗的說就是用了就開辟空間,不用就釋放空間。動態(tài)存儲分配的函數(shù)主要有(malloc(),calloc(),realloc(),free())大家有興趣可以自己了解。然后就是看怎么樣建立鏈表了,第一步我們了解鏈表中的元素叫節(jié)點,每個節(jié)點包含數(shù)據(jù)域和指針域這兩部分。這個節(jié)點數(shù)據(jù)域可以包含很多方面的信息,這就要用到前面的結(jié)構(gòu)體,數(shù)據(jù)域很容易理解,指針域就是存放下一個節(jié)點的指針即地址,這樣就建立好了每個節(jié)點之間的聯(lián)系。第二步來定義鏈表的節(jié)點,這時候我們要明白一點這個結(jié)構(gòu)體的定義打破了c語言中的先定義在使用的限制,即可以用自己定義自己,這樣的例子還有遞歸函數(shù)的定義也是這樣。既然要指向下個節(jié)點的指針,那么結(jié)構(gòu)體的成員必須包含指針變量,這個指針變量即可以指向其他類型的結(jié)構(gòu)體數(shù)據(jù),也可以指向自己所在的結(jié)構(gòu)體類型數(shù)據(jù)。例:

struct st

{

int num;

char name[20];/*也可以寫為 char *name這樣可以不限長度,但編譯器不同可能不能給這個分配空間,所以這里用字符數(shù)組*/

struct st *next;//next是struct st類型中的一員,它又指向struct st類型數(shù)據(jù)。

};

其中節(jié)點中的數(shù)據(jù)根據(jù)需要自己定義;

第三步就是創(chuàng)建鏈表,大家肯定在想最后一個節(jié)點(尾節(jié)點)咋辦呢?既然是最后一個節(jié)點肯定沒有指向了,所以這里指向NULL(空指針:即不指向任何位置);有尾節(jié)點就有頭節(jié)點,所以我們可以規(guī)定一個頭指針head(這個指針名字可以隨意定義,不是指定的),來指向鏈表頭;定義函數(shù)struct st *creat(void)來創(chuàng)建鏈表;這里我們要定義三個struct st結(jié)構(gòu)體指針變量,如下:

Struct st *head,*p1,*p2; /*head頭指針,p1指向新節(jié)點,p2指向尾節(jié)點*/

先用動態(tài)存儲非配函數(shù)malloc()為p1,p2開辟空間,p1=p2= (struct st *)malloc(sizeof(struct st));

然后創(chuàng)建一個新節(jié)點,使head,p1,p2指向該節(jié)點;定義全局變量n判斷是否該指向表頭,此外還要設(shè)置一個節(jié)點為尾節(jié)點的標(biāo)志,這里設(shè)置num==0;

再創(chuàng)建二個新節(jié)點,p1指向新節(jié)點,將第二個節(jié)點放在第一個節(jié)點后面p2->next=p1;

使第二個節(jié)點成為表尾;然后以后依次這樣走建立節(jié)點的聯(lián)系,直到輸入num為0時最后一個節(jié)點p2->next=NULL;這里要主意最后一個節(jié)點的數(shù)據(jù)項即數(shù)據(jù)域是沒進(jìn)入鏈表的;

最后就是定義void print(struct st *head)函數(shù)輸出:先找到頭指針然后格式輸出該節(jié)點數(shù)據(jù)項,定義Struct st *p;使p=head;然后指針后移:p=p->next;這里怎么判斷是否輸出結(jié)束,這就樣用到循環(huán)判斷了,這里我選擇do while;這樣main()函數(shù)中調(diào)用以上兩個函數(shù)程序就執(zhí)行了,簡單的鏈表創(chuàng)建,輸出就結(jié)束了。下面是代碼:

#include

#include

struct st

{

int num;

char name[20];

float score;

struct st *next;

};

int n;

struct st *creat(void)

{

struct st *head,*p1,*p2;

n=0;

p1=p2=(struct st *)malloc(sizeof(struct st));

scanf("%d%s%f",&p1->num,p1->name,&p1->score);

head=NULL;

while(p1->num!=0)

{

n=n+1;

if(n==1)head=p1;

else (p2->next)=p1;

p2=p1;

p1=(struct st *)malloc(sizeof(struct st));

scanf("%d%s%f",&p1->num,p1->name,&p1->score);

}

(p2->next)=NULL;

return head;

}

void print(struct st *head)

{

struct st *p;

p=head;

if(head!=NULL)

do

{

printf("%d\t%s\t%f\n",p->num,p->name,p->score);

p=p->next;

}while(p!=NULL);

}

void main()

{

struct st *head;

head=creat();

print(head);

}

運行結(jié)果如下:

C++培訓(xùn):C語言鏈接表分析

關(guān)于C語言作用域的兩個例子

第一個例子:#include

int a=0; // 全局變量

void foo(void);

int main(void) {

int a=2; // main函數(shù)內(nèi)的局部變量

int b=3; // main函數(shù)內(nèi)的局部變量

printf("1. main_b = %d\n", b);

printf("main_a = %d\n", a);

foo();

printf("2. main_b = %d\n", b);

}

void foo(void){

int b=4; // foo函數(shù)內(nèi)的局部變量

printf("foo_a = %d\n", a);

printf("foo_b = %d\n", b);

}輸出結(jié)果:1. main_b = 3main_a = 2foo_a = 0foo_b = 42. main_b = 3第二個例子:#include

int x = 2;

int y = 3;

int z = 4;

void moo(int x, int *y){

int z;

x = x+3;

*y = *y+3;

z = z+3;

/**

* 這里的 z 是局部變量。

* 注意:z 沒有被手動初始化。

* 不過從后面的輸出結(jié)果可以看出,z 被編譯器自動初始化為 0。

* 一般情況下,編譯器會有一個警告,告訴你 z 沒有被初始化

**/

printf("moo : x = %1d, *y = %1d, y = %1d, z = %1d\n", x,*y,y,z);

}

int main(void){

moo(x, &y);

printf("main: x = %1d1, y = %1d, z = %1d\n", x,y,z);

}輸出結(jié)果:moo : x = 5, *y = 6, y = 1073742056, z = 3main: x = 21, y = 6, z = 4


分享題目:C++培訓(xùn):C語言鏈接表分析
標(biāo)題來源:http://weahome.cn/article/ggoiic.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部