zoukankan      html  css  js  c++  java
  • 循环链表代码

    单链表中最后一个节点的指针域为空,如果将这个空的指针域指向头结点

    整个链表就形成了一个环形结构,故称为循环链表,这样从任意一个节点出发均可以找到

    其他节点。循环链表与单链表的区别仅在于判断最后一个节点是否为头结点,而不是判断节点

    是否为空。其插入和删除操作与单链表没有什么区别

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define OK 1
    #define ERROR 0
    #define OVERFLOW -2
    
    typedef int ElemType;
    typedef int Status;
    typedef struct Node{
      int data;
      struct Node * next;
    }Node, *Lplink;
    
    /*************************
        初始化
    输入:链表指针,初始值个数
    输出:状态码
    功能:新建一个带初始值的链表
    *************************/ Status initLink(Lplink
    *link,int num){ Lplink head = *link; Lplink new; head->data = 0; head->next = NULL; Lplink tmp = head; while(num--){ new = (Lplink)malloc(sizeof(Node)); new->data = rand()%100+1; new->next = tmp->next; tmp->next = new; tmp = tmp->next; } tmp->next = head; return OK; }

    /*************************
        颠倒链表
    输入:链表指针
    输出:状态码
    功能:将链表的节点颠倒
    *************************/
    Status invertLink(Lplink
    * link){ Lplink f = *link; Lplink s = f->next; Lplink t = s->next; do{ s->next = f; f = s; s = t; t = t->next; }while(f!=*link); return OK; }
    /*************************
        删除前驱
    输入:链表指针,删除位置
    输出:状态码
    功能:将指定位置的前驱节点删除
    *************************/
    Status deletePrior(Lplink
    *link,int index){ Lplink prior = *link; int i=0; while( prior!=link && i<index){ prior = prior->next; i++; } if( prior==link || i>index){ printf("overflow "); return OVERFLOW; } //exchange prior and target value Lplink tmp = prior->next; int val = prior->data; prior->data = tmp->data; tmp->data = val; //delete tmp prior->next = tmp->next; free(tmp); return OK; }

    /*************************
        打印链表
    输入:链表指针
    输出:状态码
    功能:将链表的值一一输出
    *************************/
    Status printLink(Lplink link){ Lplink tmp
    = link->next; while(tmp != link){ //if tmp isn't end node printf("[%d] ",tmp->data); tmp = tmp->next; } printf(" "); } int main(){ int num,index; printf("[create]enter the num:"); scanf("%d",&num); Lplink link = (Lplink)malloc(sizeof(Node)); initLink(&link,num); printLink(link); invertLink(&link); printLink(link); //delete prior printf("[delete]enter the index:"); scanf("%d",&index); deletePrior(&link,index); printLink(link); return OK; }
  • 相关阅读:
    《天才在左,疯子在右》
    MVC思想概述
    java文件读写
    HTTP协议简单笔记
    自学Python_Day01
    Linux基础介绍篇
    PHP学习 Day_01
    Linux中部分命令英语全拼
    Linux学习基础命令(三)
    Linux学习基础命令(二)
  • 原文地址:https://www.cnblogs.com/demonxian3/p/7123298.html
Copyright © 2011-2022 走看看