鏈表的創建與打印

  • 鏈表
    鏈表的創建與打印
#include<stdio.h>
#include<stdlib.h>
typedef struct student{
	char name[8];
	char num[10];
	int score;
	struct student *next;
}NODE;       //將struct student 結構類型定義爲新的類型名NODE 
				//(我得理解是,鏈表是一種特殊的結構,就是形如 NODE 一樣的結構體,所以用NODE表示這種特殊的結構) 
int main()
{
	 
	NODE *head;      //變量聲明,定義 一個NODE結構類型的指針變量head 
	NODE *creat();   // creat函數原型申明 ,返回值類型爲NODE結構指針 (該函數實現鏈表的創建) 
	void display(NODE*); // display 函數原型申明,形參爲NODE結構指針,返回值爲空 (該函數實現鏈表的打印) 
	
	head=creat();     //創建鏈表 
	display(head);    //打印鏈表 
	return 0;	
} 

//定義函數

NODE *creat()    
{
	NODE *head, *p, *s;   //聲明三個NODE類型的指針 ,head頭指針,p可以看作尾指針,s可以看作節點指針 
	int key=1,n;          //n表示鏈表的節點個數 
	char k[3],grad[3];    // 
	
	head=(NODE*)malloc(sizeof(NODE));  //給頭指針動態分配內存地址 
	p=head;                            // 
	while(key)
	{
		printf("\nEnter serial number:");
		gets(k);
		n=atoi(k);  //類型轉換成int,給n賦值 
		if(n!=0)
		{
			s=(NODE*)malloc(sizeof(NODE));  //給節點指針動態分配內存地址 
			printf("\nEnter name %d:",n);
			gets(s->name);                //給數據段賦值 
			printf("\nEnter num %d:",n);
			gets(s->num);
			printf("\nEnter grad %d:",n);
			gets(grad);
			s->score=atoi(grad);
			p->next=s;    //尾指針next指向節點的首地址 
			p=s;   // 新節點s成爲新的尾指針 
		}
		else
		key=0;
	}
	head=head->next;   //head只保留指針段的地址 
	p->next=NULL;  // 末尾指針指向空地址 
	return(head);
 } 
 //鏈表打印 
 void display(NODE *head)
 {
 	NODE *p;
 	p=head;
 	printf("\nChain is:");
 	if(head!=NULL)
 		do{
 			printf("\n%s %s %d",p->name,p->num,p->score);
 			p=p->next;
		 }while(p!=NULL);
  } 

在這裏插入圖片描述

  • 用尾插法建立帶頭結點的單鏈表
  1. 調用malloc函數,生成一個頭結點head,同時讓尾指針s=head;
  2. 調用malloc函數,建立新的節點p;
  3. 給新節點的數據域data賦值,將新節點的指針域設置爲空;
  4. 將新節點鏈接到鏈表的尾節點s之後,修改尾指針是s;
  5. 重複上述步驟2~4,直至輸入結束標誌0尾止;
#include<stdio.h>
#include<stdlib.h>
typedef struct  linklist{
	int data;
	struct linklist *next;
}node;                 //定義鏈表結構 

int main()
{
	node *head;
	node *creat();	
	void display(node*);
	head=creat();
	display(head);
	return 0;
}

//鏈表創建 
node *creat()
{
	node *head,*p,*s;
	int data;
	printf("input a int number to start:");
	scanf("%d",&data);
	head=(node*)malloc(sizeof(node));
	s=head;
	while(data){
		p=(node*)malloc(sizeof(node));
		printf("input a int number to linklist:");
		scanf("%d",&data);
		p->data=data;
		s->next=p;
		s=p;				
}
//	head=head->next;
	s->next=NULL;
	return(head);
}


//鏈表打印 
 void display(node *head)
 {
 	node *p;
 	p=head->next;
 	printf("\nChain is:");
 	if(head!=NULL)
 		do{
 			printf("\n%d",p->data);
 			p=p->next;
		 }while(p!=NULL);
  } 

在這裏插入圖片描述

  • 用頭插法建立帶頭結點的單鏈表
  1. 調用malloc函數,生成一個頭結點head,將head指針域置空;
  2. 調用malloc函數,建立新的節點p;
  3. 給新節點的數據域data賦值,將新節點的指針域指向head所指的節點;
  4. 將鏈表頭結點head的指針域修改爲新節點p;
  5. 重複上述步驟2~4,直至輸入結束標誌0尾止;`
#include<stdio.h>
#include<stdlib.h>
typedef struct  linklist{
	int data;
	struct linklist *next;
}node;                 //定義鏈表結構 

int main()
{
	node *head;
	node *creat();	
	void display(node*);
	head=creat();
	display(head);
	return 0;
}

//鏈表創建 
node *creat()
{
	node *head,*p;
	int data;
	printf("input a int number to linklist:");
	scanf("%d",&data);
	head=(node*)malloc(sizeof(node));
	head->next=NULL;
	while(data){
		p=(node*)malloc(sizeof(node));
		p->data=data;
		p->next=head->next;
		head->next=p;
		printf("input a int number to linklist:");
		scanf("%d",&data);				
}
	return(head);
}


//鏈表打印 
 void display(node *head)
 {
 	node *p;
 	p=head->next;
 	printf("\nChain is:");
 	if(head!=NULL)
 		do{
 			printf("\n%d",p->data);
 			p=p->next;
		 }while(p!=NULL);
  } 

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章