zoukankan      html  css  js  c++  java
  • c语言学习笔记(13)——链表

    链表
    算法:
    1.通俗定义:
    解题的方法和步骤
    2.狭义定义:
    对存储数据的操作
    3.广义定义:
    广义的算法也叫泛型
    无论数据是如何存储的,对数据的操作都是一样的
    我们至少可以通过两种结构来存储数据
    数组
    1.需要一整块连续的存储空间,内存中可能没有
    2.插入元素,删除元素效率极低。
    3.查找数据快
    链表
    1.查找效率低
    2.不需要一块连续的内存空间
    2.插入删除元素效率高
    专业术语
    头指针
    存放头结点地址的指针变量
    头结点
    数据类型和首节点的数据类型一模一样
    头结点是首节点前面的那个节点
    头结点并不存放有效数据
    设置头结点的目的是为了方便对链表操作
    首节点
    存放第一个有效数据的节点
    尾节点
    存放最后一个有效数据的节点
    尾节点的指针域是空的(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;
    }
    ------------------------------------------------------------------------------------------------------
  • 相关阅读:
    squid代理
    日志、远程日志、日志轮询、DHCP
    环境变量、进程
    rpm、yum
    filesystem安装后产生所有目录
    vRO 添加已有磁盘到VM
    python笔记-8(线程,进程,协程,io多路复用)
    python笔记-7(面向对象、类、面向对象进阶、异常处理、断言、反射、网络(套接字)编程、)
    python3 封装
    python3 继承
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469904.html
Copyright © 2011-2022 走看看