线性表--链表(C语言实现)

线性表是最基本的一种数据结构,是0个以上数据元素的有限序列。

由线性表的定义,我们可以得出线性表的两个特性。

首先它是一个序列,即元素之间是有序的。除了第一个元素外,每一个元素都有且只有一个直接前驱元素;除了最后一个元素外,每一个元素都有且只有一个直接后驱元素。也就是说,元素之间是一对一连接起来的。

其次它的元素是有限的,最少为0个,当元素为0个时,称之为空表。

根据线性表的序列特性,计算机可以用两种方法来实现线性表:

1、开辟一块连续的内存,将数据元素一个一个放入进去,说白了也就是用数组来实现线性表。这种实现方式对于读数据来说比较快,但对于插入和删除来说,就比较尴尬了。一般来说,不会用这种方法实现线性表这种数据结构。

2、链表。(重点来了)

链表是一种递归的数据结构。

链表中的元素为结点,结点由两部分组成,一是存储元素值的数据域、二是存储指向下一个结点地址的指针域(或者是NULL),如果该结点的指针域为NULL,则称该结点为尾结点,也就是链表的结尾。

以下简单的代码让同学们更加直观的感受一下链表。

 

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

typedef int ElemType;
typedef struct node
{
  ElemType data;
  struct node* next;
}Node, *PNode;

 

// 声明创建链表函数

PNode CreateList(void); 

 // 声明遍历链表函数
void PrintfList(PNode List);

 

int main()
{
  PNode List = CreateList();
  PrintfList(List);
  getchar();

  return 0;
}

PNode CreateNode()
{
  PNode newNode = (PNode)malloc(sizeof(Node));

  if (newNode == NULL) {
    printf("out of memory.\n");
    exit(1);
  }

  newNode->next = NULL;

  return newNode;
}

 


PNode CreateList(void)
{
  int length; //链表个数,作为循环结束的条件
  ElemType data; //链表结点数据域的值
  PNode Head = CreateNode();
  PNode s = Head;

  printf("输入链表个数:");
  scanf_s("%d", &length);
  for (int i = 1; i <= length; i++){
    PNode P = CreateNode();
    printf("第%d个结点的data值:", i);
    scanf_s("%d", &data);

    while (s->next) {
      s = s->next;
    }
    P->data = data;
    s->next = P;
  }
  getchar();
  printf("创建链表成功\n");
  return Head;
}

void PrintfList(PNode List)
{
  PNode P = List->next;
  printf("链表为:");
  if (P == NULL) {
    printf("链表为空");
  }
  while (P != NULL){
    printf("%d", P->data);
    P = P->next;
  }
  printf("\n");
}

posted @ 2018-03-05 21:04  TianJiankun  阅读(2864)  评论(0编辑  收藏  举报