线性链表基本操作实现(C/C++)

本文档展示了如何使用C/C++实现线性链表的基本操作,包括初始化、输出、创建、求长度、判断空、销毁、获取元素、定位元素、插入、删除、逆置、查找最值以及删除指定范围内的元素。每个操作都有详细的代码实现和说明。
摘要由CSDN通过智能技术生成
//函数结果状态
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define NULL 0
#define OVERFLOW -2

#include<iostream>
#include<stdio.h>
#include<malloc.h>
using namespace std;


typedef int Status;//Staus是函数的类型,其值是函数结果
typedef int DateType; //DateType可以使相应任何的数据类型如int、float、char


//结点类型定义
typedef struct LNode
{
     DateType date;//结点的数据域
     struct LNode *next;//结点的指针域
}LNode;
typedef LNode *LinkList;


Status InitList_L(LinkList &L)//初始化单链表
{
L = (LinkList)malloc(sizeof(LNode));//L指向头节点,头节点数据域为空
L->next=NULL;
return 1;
}


Status DispList_L(LinkList &L)//输出单链表
{
LinkList p = L->next;
while(p != NULL)
{
printf("%d ",p->date);
p = p->next;
}
return OK;
}


Status CreateListTou(LinkList &L,int n)//头插法创建长度为n的单链表,带头结点
{
int i;
printf("请输入要创建的链表的长度:\n");
scanf("%d",&n);
LNode *p;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL; //先建立一个带头结点的单链表
printf("请输入元素值:\n");
for(i = n;i > 0;i--)
{
p = (LinkList)malloc(sizeof(LNode));//生成新结点
scanf("%d",&p->date);//输入元素值
p->next = L->next;//使新结点指向链首
L->next = p;//插入到表头
}
return OK;
}


Status ListLength_L(LinkList L) //求单链表的长度
{
LinkList p=L;
int n=0;
while(p->next!=NULL)
{
n++;
p=p->next;
}
return(n);
}// ListLength_L


Status ListEmpty_L(LinkList L) //判断单链表是否为空,若为空返回TRUE,否则返回FALSE
{
if(L->next == NULL)
return TRUE;
else 
return FALSE;
}


Status DestroyList_L(LinkList &L) //销毁一个单链表
{
LinkList p = L,q = p->next;
while(q != NULL)
{
free(p);
p = q;
q = p->next;
}
free(p);
return OK;
}


Status GetElem_L(LinkList L, int i, DateType &e) //用e返回L中第i个数据元素的值
{
// L为带头结点的单链表的头指针。
// 当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR
int j=0;
LinkList p=L;//初始化,p指向第一个结点,j为计数器
while(j < i && p != NULL)//顺时针向后查找,直到p指向第i个元素或p为空
{
p = p->next;
++j;
}
if(!p || j > i)
return ERROR;//第i个元素不存在
e = p->date;//取第i个元素
return OK;
}


Status LocateElem_L(LinkList L,DateType e)//在链表中按元素值查找,返回该元素在链表中的位序
{
LinkList p 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值