用C语言创建一个链表数据结构

作者: 顾四秋 | 来源:发表于2017-11-03 13:55 被阅读0次

链表是一种数据结构,对于要学习数据结构的人学习好链表是非常重要的。
一个链表需要包含什么呢,我的理解就是:1、有n个节点离散分配,2、每个节点通过指针来连接,3、每个节点都有一个前驱节点和一个后驱节点,4、首节点没有前驱节点,尾节点没有后驱节点。

一、节点的构造

typedef struct Nod
{
  int data;//存放数据的域
  struct Node *pNext;  //定义一个结构体指针,指向下一个数据类型相同的节点    
}NODE,*PNODE; //NODE等价于 struct Node; PNODE等价于struct Node *; 此处用大写是为了与变量区分,可以让人容易变出是个数据类型 

typedef 只是给数据类型取个别名,即 typedef 数据类型 别名;我们知道struct Node 是我们定义的数据类型;
(2)链表的创建
在创建链表之前,我们需要需要了解一下专业术语:
首节点:存放第一个有效数据的节点;
尾节点:存放最后一个有效数据的节点;
头节点:头节点的数据类型与首节点的数据类型相同,并且头节点是首节点前面的那个节点,并不存放有效数据;头节点的存在只是为了方便链表的操作。
头指针:指向头节点的指针;
尾指针:指向尾节点的指针;

二、在头节点后面插入一个节点

PNODE Create_Lise(void){
    int len;//存放链表的长度
    int i;//循环变量
    int val;//用来临时存放变量
    PNODE Lise;
    PNODE pHead=(PNODE) malloc(sizeof(NODE));//分配一个节点
    if(pHead==NULL){
        printf("请输入链表的值");
        exit(-1); 
    }else{
        PNODE pTail=pHead;
        pHead->pNext=null;
        printf("需要一个指针指向结尾");
        scanf("%d",&len);
        for(i=o;i<len;i++){
            PNODE p=(PNODE)malloc(sizeof(NODE));
            if(null=p){
                printf("插入了");
                exit(-1); 
            } else{
                printf("我在最后插入");
                scanf("%d",&val);
                p->data=val;
                pTail->pNext=p;
                p->pNext=null;
                pTail=p; 
            }
        } 
    }
}

三、向链表插入元素

//链表的第pos有效元素前面插入元素val,首先我们应该找到第pos个元素前面一个元素的位置;  
//当链表有3个元素时,pos=4,将不会进行插入操作  
 bool Insert_List(PNODE pHead,int pos,int val){
    int i=0;
    PNODE p=pHead;
    while((Null!=p)&&(i<pos-1)){
        p=p->pNext;
        i++
     }
     if(p==null||i>pos-1)//把链表为空的情况考虑进去了;i>pos-1可以防止用户输入错误;
     return false;
     
     //程序执行到这之后,i=pos-1;p指针指向链表第pos个有效节点前驱,即指向第pos-1节点;
     PNODE q=(PNODE)malloc(sizeof(NODE));
     q->data=val;
     q->pNext=p->pNext;
     p->pNext=q; 
 } 

四、删除链表中的元素

 bool Delete_Lise(PNODE pHead,int pos,int *var){
    int i=0;
    PNODE p=pHead;
    while((NULL!=p)&&(i<pos-1)){
        p=p->pNext;
        i++; 
    } 
    if(p==null||i>pos-1) //把链表表为空的情况去了
    return false;
    
     //程序执行到这后,i=pos-1;
     PNODE q=p->pNext;//q指向待删除的节点
     *val=q->data;
     p->pNext=q->pNext;//修改链表的指向
     free(q);          //释放q所指向节点的内存 
     q=NULL;  //如果不清空,会出现野指针 
 }

五来来来冒泡排序一下

void Sort_List(PNODE pHead){
    int i,j;
    int temp;
    int len=length_List(pHead);
    PNODE p,q;
    for(i=0,p-pHeda->pNext;i<len-1;i++,p->pNext){
        for(j=i+1,q=p->pNext;i<len;j++,q=q->pNext){
            
            //交换数据
              if(p->data>q->data){
                temp=p->data;
                p->data=q->data;
                q->data=temp;
              } 
          }
      } 
  } 

相关文章

  • 2018-09-13

    用c语言创建单链表,参数采用二级指针。 源码如下: //单链表头插法创建 #include #include #d...

  • 用C语言创建一个链表数据结构

    链表是一种数据结构,对于要学习数据结构的人学习好链表是非常重要的。一个链表需要包含什么呢,我的理解就是:1、有n个...

  • 表、栈和队列

    数据结构与算法分析-c语言描述抽象数据类型(ADT)1、表ADT可以用由数组实现。链表实现。双链表。循环链表。 -...

  • c++ 实现队列

    相关资料: 用C++实现一个队列 数据结构代码实现之队列的链表实现(C/C++)

  • 菜鸟的进击——玩转C语言链表

    链表是我们学习C语言避不开的问题,就让我们一起飞过去看看吧: 1 定义链表 链表是C语言编程中常用的数据结构,比如...

  • Java实现简单的链表-面向初学者

    很久之前用C语言实现过链表,现在已经太久没用C语言。就先用JAVA实现一个简单链表好了,还是使用最原始的C语言实现...

  • redis数据结构之链表

    前言 链表作为一种常用的数据结构,会内置在很多高级的编程语言中,而Redis使用的C语言并没有内置链表数据结构,故...

  • redis数据结构的底层实现(中)

    接着上一篇的节奏,我们接着分享redis剩下数据结构的实现过程。 3、链表 链表是一种常用的数据结构,C 语言内部...

  • python3实现单向链表

    python3实现单向链表 最近重学数据结构,无奈c语言已经忘得一干二净,所以干脆用python来写。 一、代码结...

  • 数据结构和算法(二)线性表

    线性表(单项链表) 在C用struct实现链表 创建 intList,开辟内存空间,创建next下一个节点为nul...

网友评论

    本文标题:用C语言创建一个链表数据结构

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