数据结构 C语言实现循环单链表的实例

数据结构 C语言实现循环单链表的实例

实例代码:

//=========杨鑫========================//
//循环单链表的实现
#include <stdio.h>
#include <stdlib.h> 

typedef int ElemType;
//定义结点类型
typedef struct Node
{
  ElemType data;
  struct Node *next;
}Node,*LinkedList;
int count = 0; 

//1、单循环链表的初始化
LinkedList init_circular_linkedlist()
{
  Node *L;
  L = (Node *)malloc(sizeof(Node));
  if(L == NULL)
    printf("申请内存空间失败\n");
  L->next = L;
} 

//2、循环单链表的建立
LinkedList creat_circular_linkedlist()
{
  Node *L;
  L = (Node *)malloc(sizeof(Node));
  L->next = L;
  Node *r;
  r = L;
  ElemType x;
  while(scanf("%d",&x))
  {
    if(x == 0)
      break;
    count++;
    Node *p;
    p = (Node *)malloc(sizeof(Node));
    p->data = x;
    r->next = p;
    r = p;
  }
  r->next = L;
  return L;
} 

//4、循环单链表的插入,在循环链表的第i个位置插入x的元素
LinkedList insert_circuler_linkedlist(LinkedList L,int i,ElemType x)
{
  Node *pre;
  pre = L;
  int tempi = 0;
  for (tempi = 1; tempi < i; tempi++)
    pre = pre->next;
  Node *p;
  p = (Node *)malloc(sizeof(Node));
  p->data = x;
  p->next = pre->next;
  pre->next = p;
  return L;
}  

//5、循环单链表的删除,在循环链表中删除值为x的元素
LinkedList delete_circular_linkedlist(LinkedList L,ElemType x)
{
  Node *p,*pre;
  p = L->next;
  while(p->data != x)
  {
    pre = p;
    p = p->next;
  }
  pre->next = p->next;
  free(p);
  return L;
}  

int main()
{
  int i;
  LinkedList list, start;
  printf("请输入循环单链表的数据, 以0结束!\n");
  list = creat_circular_linkedlist();
  printf("循环单链表的元素有:\n");
  for(start = list->next; start != NULL; start = start->next)
  {
    if(count== 0)
    {
        break;
    }
    printf("%d ", start->data);
    count--;
  } 

  printf("\n");
  return 0;
}

如图:

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • C语言实现单链表实现方法

    C语言实现单链表实现方法 链表和我们之前实现过的顺序表一样,都是简单的数据结构,链表分为单向链表.双向链表.循环链表.而单向链表又分为两种实现方法,一种为带头节点的单链表,一种为不带头节点的单链表.我们来具体看看不带头节点的单链表的实现 单链表:它是一种链式存储的线性表,用一组地址任意的存储单元存放线性表的数据元素,称存储单元为一个节点. 今天我们来实现一些单链表的简单接口 先看看单链表的结构: (为了通用性,我们将类型重命名为DataType) typedef int DataType; //

  • C语言实现单链表逆序与逆序输出实例

    单链表的逆序输出分为两种情况,一种是只逆序输出,实际上不逆序:另一种是把链表逆序.本文就分别实例讲述一下两种方法.具体如下: 1.逆序输出 实例代码如下: #include<iostream> #include<stack> #include<assert.h> using namespace std; typedef struct node{ int data; node * next; }node; //尾部添加 node * add(int n, node * h

  • C语言单链表实现多项式相加

    本文实例为大家分享了C语言单链表实现多项式相加的具体代码,供大家参考,具体内容如下 //多项式的相加和相乘 #include<stdio.h> #include<stdlib.h> #pragma warning(disable:4996)//兼容scanf typedef struct node { int coef; int expon; struct node* link; }Polynode,*Polynomial; Polynomial InsertPolyLinklis

  • C语言单链表的实现

    单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. 链表结构: SList.h #pragma once typedef int DataType; typedef struct SListNode { DataType data; struct SListNode* next; }SListNode; // 如果要修改链表就必须加引用 SListNode* _BuyNode(DataType x); //建立节点 void PrintSlist(SListNode

  • c语言实现单链表算法示例分享

    复制代码 代码如下: #include <stdio.h>#include <stdlib.h>typedef char DataType;typedef struct Node{    DataType data;    struct Node * Next;}ListNode,* LinkList;void Judement(LinkList head){ //判断分配内存    if (!head){        printf("Overflow.");

  • C语言单链表常见操作汇总

    C语言的单链表是常用的数据结构之一,本文总结了单链表的常见操作,实例如下: #include<stdio.h> #include<stdlib.h> //定义单链表结构体 typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; }LNode,*LinkList; //创建单链表 void Build(LinkList L) { int n; LinkList p,q; p=L; pr

  • 用C语言实现单链表的各种操作(二)

    上一篇文章<用C语言实现单链表的各种操作(一)>主要是单链表的一些最基本的操作,下面,主要是一些其他的典型的算法和测试程序. 复制代码 代码如下: /* 对单链表进行排序处理*/struct LNode *sort(struct LNode *head){  LinkList *p;  int n,i,j;  int temp;  n = ListLength(head);  if(head == NULL || head->next == NULL)    return head; 

  • C语言之单链表的插入、删除与查找

    单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.要实现对单链表中节点的插入.删除与查找的功能,就要先进行的单链表的初始化.创建和遍历,进而实现各功能,以下是对单链表节点的插入.删除.查找功能的具体实现: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef int ElemType; /** *链表通用类型 *ElemType 代表自定义的数据类型 *struct

  • C语言创建和操作单链表数据结构的实例教程

    1,为什么要用到链表 数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了灵活性.但数组也同样存在一些弊病.如数组的大小在定义时要事先规定,不能在程序中进行调整,这样一来,在程序设计中针对不同问题有时需要3 0个大小的数组,有时需要5 0个数组的大小,难于统一.我们只能够根据可能的最大需求来定义数组,常常会造成一定存储空间的浪费. 我们希望构造动态的数组,随时可以调整数组的大小,以满足不同问题的需要.链表就是我们需要的动态数组.它是在程序的执行过程中根据需要有数据存储就向系统要求

  • 用C语言实现单链表的各种操作(一)

    最近,从新复习了一下数据结构中比较重要的几个部分,现在把自己的成果记录下来,主要就是仿照严蔚敏的<数据结构>(C 语言版),中的例子和后面的习题进行改编的.首先,是单链表的各种实现,其中,包含了一些常考的知识点.例如,单链表的逆置,单链表的合并,找到单链表的中间节点等的算法实现.下面这个是单链表的结构体的定义: 复制代码 代码如下: typedef struct LNode{ ElemType data; struct LNode *next;}LinkList; 下面的基本的单链表的操作:其

随机推荐