美文网首页
线性表&单链表

线性表&单链表

作者: Mustard_Buli | 来源:发表于2016-03-01 21:09 被阅读46次

线性表
**   **线性表也叫做顺序表,是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。
  它的有点是访问方便、直接,但是不足是在插入、删除时需要的内存空间因为不确定而往往比较大。


单链表
  链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。所以每个结点都是一个结构体。这里需要注意的是,在定义结构体的时候,结构体里面的变量必须是能够明确确定内存空间的。


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

//定义结点的样式
typedef struct node{
    char *name;//变量保存的是地址
    struct node *next;//指向下一个结点的指针
}Node;

void myFree(Node *pHead){
    while (pHead != NULL) {
        //保存下一个结点的地址
        Node *pTemp = pHead->next;
        
        //首先释放name对应的内存空间
        free(pHead->name);
        
        //再释放结点本身
        free(pHead);
        
        //pHead指向下一个
        pHead = pTemp;
    }
}

int main(int argc, const char * argv[]) {
    
    Node *pHead = NULL;
    Node *pTail = NULL;
    
    for (int i = 0; i < 3; i++) {
        int total = 0;//记录当前保存字符的个数
        
        //创建一个新的结点
        Node *pTemp = (Node *)malloc(1 * sizeof(Node));
        if (pTemp == NULL) {
            myFree(pHead);
            exit(EXIT_FAILURE);
        }
        
        //输入数据
        //为name分配一片内存空间
        printf("请输入名字:");
        char character;
        while (1) {
            //获取一个字符
            character = getchar();
            
            //判断这个字符是不是'\n'
            if (character == '\n'){
                //输入完毕了
                break;
            } else{
                //保存
                //判断是不是第一次来分配内存空间
                if (pTemp->name == NULL) {
                    //第一次 使用malloc
                    pTemp->name = (char *)malloc(1 * sizeof(char));
                    if (pTemp->name == NULL) {
                        exit(EXIT_FAILURE);
                    }
                } else{
                    pTemp->name = (char *)realloc(pTemp->name, (total+1)*sizeof(char));
                    if (pTemp->name == NULL) {
                        exit(EXIT_FAILURE);
                    }
                }
                
                pTemp->name[total] = character;
                
                total++;
            }
        }
        
        //这个结点的next指针赋初值
        pTemp->next = NULL;
        
        //判断是将这个结点+到head 还是tail
        if (pHead == NULL) {
            pHead = pTemp;
            pTail = pTemp;
        } else{
            pTail->next = pTemp;
            pTail = pTemp;
        }
    }
    
    Node *pTemp = pHead;
    while (pTemp != NULL) {
        printf("%s\n", pTemp->name);
        pTemp = pTemp->next;
    }
    printf("\n");
    return 0;
}

相关文章

  • 数据结构与算法-线性表

    1 单向链表 1.1 线性表-单链表节点长相如下图: 1.2 线性表-单链表逻辑结构如下图: 1.3 线性表-单链...

  • 线性表&单链表

    线性表** **线性表也叫做顺序表,是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一...

  • 单链表实现链式线性表(C语言)

    单链表实现链式线性表

  • 顺序表与单链表

    接口 顺序表(线性表)实现方式 单链表的节点 单链表的实现

  • 数据结构之线性表

    线性表 #线性表#的存储结构包括: 顺序表 链表 链表的五种形式: 单链表 带头节点:head->next ==N...

  • 数据结构——线性表

    线性表分为顺序存储结构和链式存储结构(单链表,静态链表,循环链表,双向链表)。 单链表(**一种动态结构,所占空间...

  • 考研数据结构笔记——2.线性表的链式表示(单链表)

    线性表的链式表示 单链表的定义 线性表的链式存储称为单链表;每个链表节点,除存放元素自身的信息外,还需要存放一个指...

  • 简单的数据结构

    1. 数组 array 所谓数组,是有序的元素序列 2. 链表 list 属于线性表, 分为单链表和双链表,单链表...

  • 线性表之单链表实现

    线性表之单链表实现 实现单链表的初始化、插入、删除等基本运算 实现单链表的输入、输出运算 实现单链表的逆置、归并、...

  • 数据结构-系列文章

    线性表 单链表 单链表-OC实现 双链表 循环链表 栈 栈 队列 待完善 数组 待完善 树 待完善 图 待完善 哈...

网友评论

      本文标题:线性表&单链表

      本文链接:https://www.haomeiwen.com/subject/laqnkttx.html