2.将基本链表改为循环链表

没什么大的变动,所以书中这部分只用了两段话略过

#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
struct Node{
    Node *next;
    ElemType data;
};
void CreateList(Node*&L)
{
    L = (Node*)malloc(sizeof(Node));
    if(!L) exit(-2);
    L->next = L;
    L->data = 0;
}
void InsertList(Node*&L,ElemType e)
{
    Node *p = L;
    for(int i=0;i<L->data;++i)
    {
        p=p->next;
    }
    Node *s = NULL;
    s=(Node*)malloc(sizeof(Node));
    s->data = e;
    s->next = p->next;
    p->next = s;
    ++(L->data);
}
void DeleteList(Node*&L,int n)
{
    Node*p = L;
    if(n<1||n>L->data) exit(-2);
    for(int i = 0;i<n-1;i++)
    {
        p=p->next;
    }
    Node*temp = p->next;
    p->next = p->next->next;
    free(temp);
    --L->data;
}
void ShowList(Node*&L)
{
    Node *p = L;
    while(p->next!=L){
        printf(">%d\t",(p)->data);
        p=p->next;
    }

    printf("\n");
}
int main()
{
    Node *N1;
    CreateList(N1);
    InsertList(N1,1);
    ShowList(N1);
    InsertList(N1,2);
    ShowList(N1);
    InsertList(N1,3);
    ShowList(N1);
    InsertList(N1,4);
    ShowList(N1);
    InsertList(N1,5);
    ShowList(N1);
    DeleteList(N1,1);
    ShowList(N1);
    DeleteList(N1,2);
    ShowList(N1);
}
时间: 2024-10-10 01:29:25

2.将基本链表改为循环链表的相关文章

JAVA 链表操作:循环链表

主要分析示例: 一.单链表循环链表 二.双链表循环链表 其中单链表节点和双链表节点类和接口ICommOperate<T>与上篇一致,这里不在赘述.参考:JAVA链表操作:单链表和双链表http://www.cnblogs.com/xiaoxing/p/5969133.html 一.单链表循环链表 package LinkListTest; import java.util.HashMap; import java.util.Map; public class SingleCycleLinkLi

【算法设计-链表】单链表与双向循环链表

1.单链表代码:包含了尾插法,插入,删除操作. 有头结点的单链表也是为了在第一个位置插入和删除时候容易,不需要另外讨论 #include<stdio.h> #include<stdlib.h> typedef struct Linklist { int key; Linklist *next; }Linklist; Linklist* create_end() { Linklist *head=(Linklist *)malloc(sizeof(Linklist)); Linkli

[读书笔记]-大话数据结构-3-线性表(三)-静态链表、循环链表和双向链表

静态链表 对于没有指针的编程语言,可以用数组替代指针,来描述链表.让数组的每个元素由data和cur两部分组成,其中cur相当于链表的next指针,这种用数组描述的链表叫做静态链表,这种描述方法叫做游标实现法.我们对数组的第一个和最后一个元素做特殊处理,不存数据.让数组的第一个元素cur存放第一个备用元素(未被占用的元素)下标,而数组的最后一个元素cur存放第一个有值的元素下标,相当于头结点作用.空的静态链表如下图 当存放入一些数据时("甲""乙""丁&q

链表(五)——单向循环链表

1.单向循环链表 区分单向链表和单向循环链表:单向循环链表的尾指针指向头结点. 2.单向循环链表的基本操作 #include <stdio.h> #include <malloc.h> #define NULL 0 typedef struct node { int data; struct node *next; }ElemSN; ElemSN * creat_link(int ms); //创建一个单向循环链表 void print_link(ElemSN *head); //

(java描述)关于链表的代码-----单双、循环链表、约瑟夫环、多项式相加

将链表头尾倒置 将几个链表合并成一个新的链表,将链表中重复的节点去掉,并按大小排序 双向循环链表 单向循环链表(约瑟夫循环) 多项式相加 程序源代码 单链表.单向循环链表结点类 package javab; public class Node { int data; Node next; public Node(int data){ this.data=data; } } 第一题代码: package javab; import java.util.Scanner; public class I

复习下C 链表操作(双向循环链表,查找循环节点)

双向循环链表  和 单向循环链表 查找循环节点 思路都是一样. 快慢指针查找法. 理论可参考 c 链表之 快慢指针 查找循环节点 typedef struct Student_Double { char name[10]; int point; struct Student_Double *preStu; struct Student_Double *nextStu; } StudentDouble; StudentDouble * CreateDoubleCircleLink_Table(){

循环链表的创建、插入、删除、逆序、显示(C++实现)

对于单链表,因为每一个结点仅仅存储了向后的指针.到了尾标志就停止了向后链的操作,这样,其中某一结点就无法找到它的前驱结点了. 对于单链表的操作大家能够看我的这篇博客http://blog.csdn.net/zxnsirius/article/details/51183055 我们将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成了一个环.这样的头尾相接的单链表称为单循环链表,简称循环链表. 以下是循环链表的综合操作的样例 程序执行结果

数据结构与算法--线性表系列(循环链表、双向链表)

hello,everybody,今天我们来学习线性表的最后两种形式,循环链表.双向链表.这两种链表,是链式存储结构的不同形式.书归正传,我们先来看看循环链表吧. 大家思考一个问题,我们把线性表各个元素比作下图的路线图上的城市: 我们的线性表各个结点的指针,都是指向唯一的后继结点,线性表的终端结点的指针为空.这样的话,如果我们在南京,我们需要先访问南京右j边的城市,再访问南京左边的城市.根据线性表的结构,我们只能返回上海,从上海依次访问到北京.因为我们的终端结点的指针为空,如果直接访问南京右边的城

第三章 线性表---链式存储结构(循环链表)

将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表(circular linked list) 结构模型