精华内容
下载资源
问答
  • 循环链表可以用来使计算机处理内存...循环链表的插入和删除 #include"iostream"#include"stdlib.h"using namespace std;struct clist{ int data; struct clist *next;};typedef struct clist cnode;typedef cnode...

    循环链表可以用来使计算机处理内存工作区或输出至数据缓冲区。

    循环链表的插入和删除

    #include"iostream"
    #include
    "stdlib.h"
    using namespace std;

    struct clist
    {
    int data;
    struct clist *next;
    };
    typedef
    struct clist cnode;
    typedef cnode
    *clink;

    /*-----循环链表的输出------*/

    void printclist( clink head)
    {
    clink ptr;
    head
    =head->next;
    ptr
    =head;
    do
    {
    printf(
    "[%d]",ptr->data);
    ptr
    =ptr->next;
    }
    while(head!=ptr && head !=head->next);
    printf(
    "\n");

    }
    /*-----循环链表的结点插入----*/

    clink insertnode(clink head,clink ptr,
    int value)
    {
    clink new_node;
    new_node
    =(clink) malloc(sizeof(cnode));
    if(!new_node)
    return NULL;
    new_node
    ->data=value;
    new_node
    ->next=NULL;

    if(head==NULL)
    {
    new_node
    ->next=new_node;
    return new_node;
    }
    if(ptr==NULL)
    {
    /*----情况1:插在第一结点之前---*/
    new_node
    ->next=head->next;
    head
    ->next->next=new_node;
    }
    else
    {
    /*-----情况2:插在结点之后-------*/
    new_node
    ->next=ptr->next;
    ptr
    ->next=new_node;
    }
    if(ptr==head)
    head
    =new_node;
    return head;
    }
    /*---循环链表结点删除---*/
    clink deletenode(clink head,clink ptr)
    {
    clink previous;
    if(head==NULL)
    {
    /*----情况1:删除第一个结点----*/
    head
    ->next=ptr->next;
    }
    else
    {
    /*--情况2:删除中间结点---*/
    previous
    =head;
    if(head!=head->next)
    while(previous->next!=ptr)
    previous
    =previous->next;
    previous
    ->next=ptr->next;
    }
    if(ptr==head)
    head
    =previous;
    free(ptr);
    return head;
    }

    /*使用插入结点的方式来创建链表,完成后将链表内容输出,然后删除前后两结点*/

    int main()
    {
    clink head
    =NULL;
    int list[6]={9,7,3,4,5,6};
    int i;

    head
    =insertnode(head,head,list[0]);
    printf(
    "创建第一个结点: ");
    printclist(head);
    /*---情况1:插在第一结点前----*/
    head
    =insertnode(head,NULL,list[1]);
    printf(
    "插入第一结点之前: ");
    printclist(head);
    for(i=2;i<6;i++)
    {
    /*---情况2:插在结点之后-----*/
    head
    =insertnode(head,head->next,list[i]);
    printf(
    "插入结点之后: ");
    printclist(head);
    }
    /*---情况1:删除第一个结点---*/
    head
    =deletenode(head,head->next);
    printf(
    "删除第一个结点: ");
    printclist(head);
    /*--删除最后一个结点--*/
    printf(
    "删除最后一个结点: ");
    head
    =deletenode(head,head);
    printclist(head);
    }

     

    转载于:https://www.cnblogs.com/FCWORLD/archive/2010/11/20/1882463.html

    展开全文
  • #include<stdio.h>/*双向循环链表的插入和删除,2009年6月29日王红刚*/ #include #include #define ERROR 0 #define OK 1 typedef char ElemType; typedef struct DNode { ElemType data; struct ...

    展开全文
  • /* 再论循环链表的插入和删除操作 */#include "stdio.h"struct clist{ int data; struct clist *next;};typedef struct clist cnode;typedef cnode *clink;/*循环链表的输出*/void printclist(clink head){ clink...

     /* 再论循环链表的插入和删除操作 */
    #include "stdio.h"
    struct clist
    {
     int data;
     struct clist *next;
    };
    typedef struct clist cnode;
    typedef cnode *clink;
    /*循环链表的输出*/
    void printclist(clink head)
    {
     clink ptr;
     head=head->next;/*指向链表的第一个结点*/
     ptr=head;
     do
     {
      printf("[%d]",ptr->data);
      ptr=ptr->next;
     }
     while(head!=ptr&&head->next!=head);
     printf("/n");
    }
    /*循环链表的结点插入*/
    clink insertnode(clink head,clink ptr,int value)
    {
     clink new_node;
     /*创建新结点分配结点内存*/
     new_node=(clink)malloc(sizeof(cnode));
     if(!new_node) return NULL;
     new_node->data=value;
     new_node->next=NULL;
     if(head==NULL)
     {
      new_node->next=new_node;
      return new_node;
     }
     if(ptr==NULL)
     {
      /*第一种情况:插在第一个结点前面*/
      new_node->next=head->next;
      head->next->next=new_node;
     }
     else
     {
      /*第二种情况:插在结点之后*/
      new_node->next=ptr->next;
      ptr->next=new_node;
     }
     if(head==ptr)
     {
      head=new_node;/*改变链表开始*/
     }
     return head;
    }
    /*循环链表的结点删除*/
    clink deletenode(clink head,clink ptr)
    {
     clink previous;
     if(head==NULL) return NULL;
     if(head->next==ptr)
     {   /*第一种情况:删除第一个结点*/
      head->next=ptr->next;
     }
     else
     {
      /*第二种情况:删除中间结点*/
      previous=head;
      if(head!=head->next)
      while(previous->next!=ptr)
      {
       previous=previous->next;
      }
      previous->next=ptr->next;
     }
     if(ptr==head)
     {
      head=previous;
     }
     free(ptr);
     return head;
    }
    /*主程序*/
    void main()
    {
        clink head=NULL;
        int list[6]={9,7,3,4,5,6};
        int i;
        head=insertnode(head,head,list[0]);
        printf("创建第一个结点:");
        printclist(head);
        /*第一中情况:插在第一结点前*/
        head=insertnode(head,NULL,list[1]);
        printf("插入第一结点之前:");
        printclist(head);
        for(i=2;i<6;i++)
        {
         /*第二种情况:插在结点之后*/
         head=insertnode(head,head->next,list[i]);
         printf("插入结点之后:");
         printclist(head);
        }
        /*第一种情况:删除第一个结点*/
        head=deletenode(head,head->next);
        printf("删除第一个结点:");
        printclist(head);
        /*删除最后一个结点*/
        printf("删除最后一个结点:");
        head=deletenode(head,head);
        printclist(head);
    }

    展开全文
  • int ddelete(NodePointer head, NodePointer deleted) //head 为链表的头结点, deleted为需要删除的节点 {  if(deleted == head)  {  printf("head node can't be deleted.\n");  return 0;  } ...

    typedef struct Element{
        int elem;
        /*other field*/
    }Element;

    typedef struct Node * NodePointer;
    struct Node {
        Element data;
        NodePointer llink;
        NodePointer rlink;
    };



    int dinsert(NodePointer pnode, NodePointer pnewnode) //在pnode节点后面插入, pnewnode为需要插入的节点

    {
        if(NULL == pnewnode)
        {
            printf("dinsert error, newnode = NULL.\n");
            return 0;
        }
        pnewnode->llink = pnode;
        pnewnode->rlink = pnode->rlink;
        pnode->rlink->llink = pnewnode;
        pnode->rlink = pnewnode;
        
        return 1;
    }

    int ddelete(NodePointer head, NodePointer deleted)   //head 为链表的头结点, deleted为需要删除的节点
    {
        if(deleted == head)
        {
            printf("head node can't be deleted.\n");
            return 0;
        }
        deleted->llink->rlink = deleted->rlink;
        deleted->rlink->llink = deleted->llink;
        free(deleted);
        return 1;
    }
    展开全文
  • 链表的插入和删除

    2020-10-25 19:47:40
    完成双循环链表的插入和删除函数 函数接口定义: bool insertDuList(List &L, Position p, ElementType d); bool delDuList( List &L, Position p ); 指针p指向待删除结点 指针p指向结点后插入新结点 ...
  • 循环链表插入和删除

    2020-11-30 10:48:40
    将单链表中终端结点指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接单链表成为单循环链表,简称循环链表。 单链表判断空链表为head->next 而循环链表判断空链表为head->next 是否...
  • 写在前面的 顺序表 插入 删除 定位 单链表 插入 删除 双向循环链表 删除 ...总结写在前面的 在复习... 接下来主要总结一下单链表和循环链表的插入删除的方法具体的代码。导图如下 顺序表插入 步骤:首先将节点依次
  • /*双向链表的插入删除,与两表的合并*/ #include<stdio.h> #include<stdlib.h> #include<malloc.h> #define ERROR 0; #define OK 1; typedef struct Node{ char data; struct Node*prior,*next;...
  • 数据结构算法(二)单向循环链表的创建插入删除实现
  • package ... *双向循环链表的结构   *author yy  * */ public class DNode> implements Comparable> { private T data; private DNode pre; private DNode next; pu
  • 【实验内容】 设有两个无头结点的单链表,分别为ha,hb,其链中有数据域data,链域next,...3、 掌握链表的插入删除的相关语句及基本方法。 【实验步骤与要求】 1、 实验前的准备 (1) 了解C语言的基本概念; (2
  • 双向链表插入删除、与创建原理: 其实双向链表和单链表区别主要是在节点结构上,因为节点结构不同,进而导致相关操作较单链表也就有了一些差异;双向链表,顾名思义,从头可以到尾,由尾也可以到头;双向...
  • template<class T> //类声明 class HDoubleCircular { public: HDoubleCircular() {}//构造函数不会写 ~HDoubleCircular();//析构函数不会 bool IsEmpty() const {return head->right == head;} int Length...
  • 双向链表的插入和删除算法

    千次阅读 2011-12-07 20:50:04
    1.在带有头结点双向循环链表中第1个数据域内容为x结点右边插入一个数据信息为item新结点,算法如下: typedef struct node{ int data; struct node *llink, *rlink; }DNode, *DLinkList; int insertElem( ...
  • 文章目录双链表与循环链表双链表单链表 VS 双链表双链表的初始化(带头结点)双链表的插入双链表的删除双链表的遍历循环链表循环单链表循环双链表 双链表与循环链表 双链表 单链表 VS 双链表 单链表:无法逆向检索,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,625
精华内容 650
关键字:

循环链表的插入和删除