一.程序可实现
初始化
头插法建立
尾插法建立
清空
判空
销毁
输出
查找(按数值/位置)
插入(按数值/位置进行前/后插)
删除(按数值/位置)
求链表长度
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"