打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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 ;
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
单链表知识详解
C语言单向链表的实现
C语言数据结构
C语言的那些小秘密之链表(二)
剑指offer之判断链表是否包含环
单链表的建立(C语言完整程序)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服