【C语言/数据结构】循环链表的基本操作

本文介绍了如何在C语言中实现循环链表的基本操作,包括初始化、建立、清空、判断空、销毁、输出、查找、插入和删除等。讨论了循环链表与单向链表的区别,并提供了完整的代码实现。同时,作者使用一组顺序表进行测试,欢迎读者提出代码改进意见。
摘要由CSDN通过智能技术生成

一.程序可实现

初始化
头插法建立
尾插法建立
清空
判空
销毁
输出
查找(按数值/位置)
插入(按数值/位置进行前/后插)
删除(按数值/位置)
求链表长度

ps:“按数值”默认操作对象是指顺序表中第一个同值的元素。

二.知识点
循环链表和单向链表的差别仅仅在于结束的标志不同:

//单链表结束标志:最后一个节点指向空;
//循环链表结束标志:最后一个节点指向头指针/头节点

故编程序的时候要着重思考的,也是这个。其余部分和单链表高度一致。

三.完整代码如下:

注意!!!我使用的编译器为Xcode,程序直接放在Dev c++等编译器下运行的时候,中文注释可能会出现乱码类的显示错误。

//头文件
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
//函数结果状态码
#define TRUE     1
#define FALSE    0
#define OK       1
#define ERROR    0
#define INFEASIBLE  -1
#define OVERFLOW    -2
typedef int Status;   //此处定义Status等价于int
typedef int ElemType; //此处定义ElemType等价于int
//循环链表的存储结构
typedef struct LNode{
   
    ElemType data;
    struct LNode *next;
} LNode,*LinkList;     //假设L是LinkList型的变量,则L为循环链表的头指针
//函数声明(16):
void InitLinkList(LinkList &L);                                     //初始化
void CreateLinkList_head(LinkList &L);                              //头插法建立
void CreateLinkList_title(LinkList &L);                             //尾插法建立
void ClearLinkList(LinkList &L);                                    //清空
void IsEmpty(LinkList &L);                                          //判空
void DestroyList(LinkList &L);                                      //销毁
void ListTraverse(LinkList &L);                                     //输出
Status LocateElem(LinkList &L,ElemType e);                          //按数值查找
Status GetElem(LinkList &L,int i,ElemType &e);                      //按位置查找
Status LinkInsert_before_num(LinkList L,ElemType e,ElemType new_e); //按数值前插
Status LinkInsert_after_num(LinkList L,ElemType e,ElemType new_e);  //按数值后插
Status LinkInsert_before_place(LinkList L,int i,ElemType new_e);    //按位置前插
Status LinkInsert_after_place(LinkList L,int i,ElemType new_e);     //按位置后插
Status ListDelet_num(LinkList &L,int e);                            //按数值删除
Status ListDelet_place(LinkList &L,int i,ElemType &e);              //按位置删除
Status ListLength(LinkList L);                                      //单链表长度

//主函数:
int main()
{
   
    LinkList L;      //头指针
    int a,i;
    ElemType e,new_e;
    InitLinkList(L);
    while(1)
    {
   
        printf("\n请输入对应数字操作菜单(0〜13):\n");
        printf("1.头插法创建(与输入逆序)\n");
        printf("2.尾插法创建(与输入同序)\n");
        printf("3.清空\n");
        printf("4.判空\n");
        printf("5.销毁\n");
        printf("6.输出\n");
        printf("7.按数值查找,并返回第一个同值元素所在位置\n");
        printf("8.按位置查找,并返回该位置的元素数值\n");
        printf("9.按数值前插(每次的操作对象都是本次查找都第一个同值元素)\n");
        printf("10.按数值后插(每次的操作对象都是本次查找都第一个同值元素)\n");
        printf("11.按数值删除(每次的操作对象都是本次查找都第一个同值元素)\n");
        printf("12.按位置前插(每次的操作对象都是本次查找都第一个同值元素)\n");
        printf("13.按位置后插(每次的操作对象都是本次查找都第一个同值元素)\n");
        printf("14.按位置删除\n");
        printf("15.显示单链表长度\n");
        printf("0.退出\n");
        printf("\n请输入你的选择:\n"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值