C語言 單鏈表的創建、輸出和釋放。(頭插法以及尾插法)。

`指針

include <stdio.h>

include <stdlib.h>

typedef struct Node{
int data;
struct Node *next;
}Node;code

Node *CreatH(); //尾插法創建鏈表
Node * CreatH1(); // 頭插法創建鏈表
void Show(Node *); //輸出鏈表
void Ease(Node *); //鏈表釋放內存

int main(void)
{
Node *Head, *Head1;
Head = CreatH();
Show(Head);
Head1 = CreatH1();
Show(Head1);
Ease(Head);io

return 0;

}鏈表

Node *CreatH() //尾插法
{
int x;
Node *Head;
Head = (Node *)malloc(sizeof(Node));
Head->next=NULL; //初始化
Node *r; //尾指針next

r = Head;       //尾指針始終要指向最後一個結點,即最新建立的那個結點。
while(scanf("%d", &x)!=EOF){
	Node *p = (Node *)malloc(sizeof(Node));
	p->data = x;
	r->next = p;    //將p鏈接到鏈表末尾
	r = p;          //r指向新的鏈表末尾
} 
r->next=NULL;           

return Head;

}數據

Node * CreatH1() //頭插法創建鏈表
{
int x;
Node *Head; //頭指針
Node *p;di

Head = (Node *)malloc(sizeof(Node));    //頭結點
Head->next=NULL;
while(scanf("%d", &x)!=EOF){
	p = (Node *)malloc(sizeof(Node));    
            /*
                  申請新結點
                  必定不能這樣寫:Node p;
                  不能夠直接定義一個結構體,若是這樣,創建的鏈表在代碼塊結束後就會被釋放掉。
                  必須動態分配一塊內存,而後定義一個指針指向。
            */

	p->data = x;
	p->next = Head->next;    
	Head->next = p;
}

return Head;

}while

void Show(Node *Head) //輸出鏈表
{
Node *p;co

p = Head->next;            //不能夠是 P = Head;
while(p!=NULL){            //     while(p->Head!=NULL)  這樣寫的話,最後一個結點的數據就沒法讀取到。   
	printf("%d ", p->data);
	p = p->next;
}
printf("\nend\n");

return ;

}

void Ease(Node *Head) //釋放鏈表,背下來就行。
{
Node *p;
while(Head!=NULL){
p = Head;
Head = Head->next;
free(p);
}

return ;

}

`

相關文章
相關標籤/搜索