美文网首页
链表之C实现

链表之C实现

作者: 低吟浅唱1990 | 来源:发表于2017-05-06 11:24 被阅读4次

用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。每个数据的元素需要存储数据元素信息外,还要存储它的后继元素的存储地址。例如数据ai需要存储本身的数据信息之外还要存储ai+1的地址。把链表中第一个节点的存储位置叫做头指针,线性链表中最后一个节点的后继指针为NULL

Paste_Image.png

C语言中用结构指针来描述单链表

  typedef int ElemType
  typedef struct Node{
      ElemType data;      //数据域
      struct Node *next;   //指针域
  }Node;
typedef struct Node *LinkList;   /*链表*/

获得链表第i个数据

int getElem(LinkList L,int i,ElemType *e){
    int j;
    LinkList p;
    p = L->next;  //p指向链表L的第一个节点
    j = 1;
  while(p && j<i){
      p = p->next;
      ++j;
  }
  if (!p || j>i){
      return -1;   //表示没有找到 假定数据域没有负数
  }
   int e = p->data;
   retun e;
}

在第i个位置之前插入新的数据元素e

  void insertLink(LinkList *L,int i,ElemType e){
      int j;
      LinkList p,s;
      p = *L;
      j = 1;
      while(p && j<i){    //指针移动到指定位置
          p = p->next;
          ++j;
      }
      
      if(!p || j>i){ return;}
      s = (LinkList)malloc(sizeof(Node));/*生成一个新节点*/
      s->data = e;
      s->next = p->next;  //把s的后继节点改成p的后继节点
      p->next = s;          //再把p的后继节点改成s
  }

删除第i个元素

      void listdelete(LinkList *L,int i,ElemType *e){
          int j;
          LinkList p,q;
          p = *L;
          j = l;
          while(p->next && j<i){
              p = p->next;
              ++j;
          }
          
          if(!(p->next) || j>i){
              return;
          }
          q = p->next;  // 找到要删除的元素q
          p->next = q->next;   //将q的后继元素赋值给p
          *e = q->data;
           free(q);  //释放内存
      }

创建整个链表

    void createList(LinkList *L,int n){
          LinkList p,r;
          int i;
          srand(time(0));
          *L = (LinkList)malloc(sizeof(Node));
            r = *L;
            for(i=0;i<n;i++){
                p = (Node *)malloc(sizeof(Node));
                p->data = rand()%100 + 1;
                r->next = p;
                r = p;
            }
          
            r->next = NULL;
    }

删除整表

        void clearList(LinkList *L){
            LinkList p,q;
            p = (*L)->next;
            while(p){
                q = p->next;
                free(p);
                p=q;
            }
            (*L)->next = NULL;
        }

相关文章

  • 链表

    单链表 C实现 Java实现 双链表 C实现 Java实现

  • c++ 实现队列

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

  • 链表之C实现

    用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。每个数据的元素需要存储数据元...

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

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

  • C++实现双向循环链表

    本次博文是关于利用C++模板的方式实现的双向循环链表以及双向循环链表的基本操作,在之前的博文C++语言实现双向链表...

  • LeetCode 141 环形链表 Linked List Cy

    有关链表的LeetCode做题笔记合集,Python实现 链表定义 141. 环形链表 Linked List C...

  • Redis 源码--链表。

    因为C语言是一个比较底层的语言,库内没有实现链表,于是Redis自己实现了链表。Redis的链表是一个双向链表。 ...

  • C++语言实现双向链表

    这篇文章是关于利用C++模板的方式实现的双向链表以及双向链表的基本操作,在之前的博文C语言实现双向链表中,已经给大...

  • C实现链表

    demo地址

  • C 实现链表

    前言 第一次学数据结构,代码写的可能不是很好,大神勿喷,指出来就行。 链表 顾名思义,链表就是每个数据之间有某种连...

网友评论

      本文标题:链表之C实现

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