• 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(9)链表


    版权声明:本文出自水寒的原创文章,博客迁移到个人站点https://dp2px.com。 https://blog.csdn.net/lxq_xsyu/article/details/23968353

    我们至少能够通过两种结构来存储数据

    数组

    1.须要一整块连续的存储空间。内存中可能没有

    2.插入元素,删除元素效率极低。

    3.查找数据快

    链表

    1.查找效率低

    2.不须要一块连续的内存空间

    3.插入删除元素效率高

    计算机术语

    头指针:存放头结点地址的指针变量

    头结点:

    数据类型和首节点的数据类型一模一样

    头结点是首节点前面的那个节点

    头结点并不存放有效数据

    设置头结点的目的是为了方便对链表操作

    首节点:存放第一个有效数据的节点

    尾节点:

    存放最后一个有效数据的节点

    尾节点的指针域是空的(null)

    头指针---->头结点---->(首节点----->链表------>尾节点)  ()内是有效数据

    仅仅须要知道头指针就能确定一个链表(尾节点指针域是null)

    2012年2月6日7:30:48
    
    # include <stdio.h>
    # include <malloc.h>
    # include <stdlib.h>
    
    struct Node{
    	int data;
    	struct Node * pNext;
    };
    
    struct Node * create_list();
    void traverseList(struct Node *);
    
    int main(void){
    	struct Node * pHead = NULL;  //定义头指针
    	pHead = create_list();  //构造链表,返回头结点地址
    	traverseList(pHead);  //输出链表
    
    	return 0;
    }
    
    struct Node * create_list(void){
    	int len;
    	int i;
    	int val;
    
    	//创建一个头结点
    	struct Node * pHead = (struct Node *)malloc(sizeof(struct Node)); 
    	if(NULL == pHead){
    		printf("分配失败,程序终止!
    ");
    		exit(-1);
    	}
    	struct Node * pTail = pHead;  //将头结点的地址给指针变量pTail使pTail指向头结点
    	pTail->pNext = NULL;  //头结点的结构体元素(下一个节点地址)赋值
    	printf("请输入你要创建链表的节点个数:len = ");
    	scanf("%d", &len);
    
    	for(i=0; i<len; i++){
    		printf("请输入第%d个节点的值:", i+1);
    		scanf("%d", &val);
    
    		//给第 i+1 个节点分配内存空间
    		struct Node * pNew = (struct Node *)malloc(sizeof(struct Node));
    		if(NULL == pNew){
    			printf("分配失败,程序终止!
    ");
    			exit(-1);
    		}
    		//内存分配成功后
    		pNew->data = val;      //新节点赋值
    		pTail->pNext = pNew;   //pNew指向的地址给头结点的变量
    		pNew->pNext = NULL;    //新节点地址变量给空值
    		pTail = pNew;         //又一次使pTai 替换 pNew进行下一次分配创建
    	}
    	return pHead;
    }
    
    void traverseList(struct Node * pHead){
    	struct Node * p = pHead->pNext;
    	while(NULL != p){
    		printf("%d
    ", p->data);
    		p = p->pNext;
    	}
    	return;
    }


  • 相关阅读:
    10年学到的编程经验总结
    高效阅读源代码指南
    一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
    如何用git将项目代码上传到github
    关于[].slice.call(arguments, 1) 的思考
    前端笔试题(一)
    2017年第一波JavaScript前端面试题
    2017前端面试题之综合篇(1)
    2017前端面试题之Js篇(1)
    前后端分离后各自职责
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10959047.html
Copyright © 2020-2023  润新知