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


#include <stdio.h>
#include <stdlib.h>

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

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); 
	
	return 0;
}

Node *CreatH()	//尾插法 
{
	int x;
	Node *Head;
	Head = (Node *)malloc(sizeof(Node));
	Head->next=NULL;	//初始化 
	Node *r;	//尾指針 
	
        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;
	
	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;
}

void Show(Node *Head)        //輸出鏈表
{
	Node *p;
	
	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 ;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM