zoukankan      html  css  js  c++  java
  • C语言实现双链表(带头节点)

    双链表和单链表性质相似只是在多加了一个前指针

    1.定义结构体

    typedef struct Node{
      int data;
      struct Node *prior;
      struct Node *next;
    }Node,*LinkedList;

    2.比单链表一个指向

    LNew->data = i;
    L->next = LNew;
    LNew->prior = L; // 比单链表多这一条
    LNew->next = NULL;
    L = LNew;

    具体实现demo.c

    #include <stdio.h>
    #include <malloc.h>
    #include <stdlib.h>
    
    typedef struct Node{
      int data;
      struct Node *prior;
      struct Node *next;
    }Node,*LinkedList;
    
    LinkedList LinkedListInt(){
      Node *Head,*L,*LNew;
      int i;
      Head = (Node *)malloc(sizeof(Node));
      if(Head == NULL){
        printf("申请空间失败
    ");
        exit(-1);
      }
    
      L = Head;
      L->next = NULL;
    
      for(i=0;i<5;i++){
        LNew = (Node *)malloc(sizeof(Node));
        if(LNew == NULL){
          printf("申请空间失败
    ");
          exit(-1);
        }
    
        LNew->data = i;
        L->next = LNew;
          LNew->prior = L;
        LNew->next = NULL;
        L = LNew;
      }
    
      return Head;
    }
    
    int main(int argc, char const *argv[]) {
      /* code */
      Node *p;
      int i;
      p = LinkedListInt();
      p = p->next;
      // 让p的前指针指向p,这样第一个有值元素就有前指针
      p->prior = p;
    
      while(p != NULL){
        //printf("%d,",p->prior->data);
        printf("%d ",p->data);
        //printf("%d ",p->next->data);
        // 防止p指空报错
        if(p->next != NULL){
          p = p->next;
        }else{
          break;
        }
      }
    
      printf("
    ");
      // 测试指针能不能指回去
      p = p->prior;
      printf("%d ",p->data);
      printf("
    ");
    
      return 0;
    }

  • 相关阅读:
    Java中hashCode() 和 equals()
    【转】Java操作Excel竟然这么简单!
    SpringMVC上
    网络基础知识(2)
    网络基础知识 (1)
    线程的安全
    多线程
    字符编码ANSI和ASCII区别、Unicode和UTF-8区别
    序列化对象
    IO流_File类
  • 原文地址:https://www.cnblogs.com/xiaomingzaixian/p/9396045.html
Copyright © 2011-2022 走看看