单链表的操作

#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"

#define TRUE  1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW  -2
typedef int  Status;

typedef int ElemType;


//单链表结构体定义
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;

//初始化算法描述
void InitList_L(LinkList &L)
{
  L=(LNode*)malloc(1*sizeof(LNode));
  L->next=NULL;
}



//单链表的查找(序号)
Status GetElem_L(LinkList L,int i,ElemType &e) //查找的表/查找的元素位置/返回值
{
    LNode *p=L->next;//定义起始位置
    int j=1;
    while (p!=NULL&&j<i)//判断范围是否在这个表内
    {
      p=p->next;j++; //如果没找到就数值加一,这里j相当于查找元素的位置
    }
    if (j==i)//表示找到该元素
    {
    e=p->data;//p的数据~这个值用e表示出来
    return OK;
    }
    else
        return ERROR;
}



//单链表的查找(内容)
 int LocateElem_L(LinkList L,ElemType key)//查找的表/返回值
//这里注意,不带&是因为这种操作没有对其中的值发生操作,直接输出
{
    LNode *p=L->next;//初始值
    int i=1;
    while (p&&key!=p->data)//判断找到的条件
    {
      p=p->next;//没有找到就让位置向下一个
      i++;
    }
    if (p->data==key)
    return i;//找到了直接输出
    else
        return 0;
}





//单链表的插入
Status ListInsert_L(LinkList &L,int i,ElemType e)
{
    LNode *p=L;
    int j=0;
    while (p && j<i-1)
    {
        p=p->next;
        j++;
    }
    if (!p||j>i-1)//判断房间是否够用
        return ERROR;
    LNode *s=(LinkList)malloc(sizeof(LNode));
    s->data=e;s->next=p->next;
    p->next=s;
    return OK;
}



//单链表的删除
Status ListDelete_L(LinkList &L,int i,ElemType &e)
{
    LNode *p=L;
    int j=0;
    while (p->next&&j<i-1)
    {
        p=p->next;j++;
    }
    if (!(p->next)||j<i-1)
        return ERROR;
    LNode *q=p->next;p->next=q->next;
    e=q->data;free(q);
    return OK;
}


int main()
{
//建立一个表LA,定义LA的类型,调用表LA并建立五个元素
    LNode *LA;
    InitList_L(LA);
    ListInsert_L(LA,1,11);
    ListInsert_L(LA,2,12);
    ListInsert_L(LA,3,13);
    ListInsert_L(LA,4,14);
    ListInsert_L(LA,5,15);
    int a=LocateElem_L(LA,13);
    printf("单链表中元素为13的元素位置:%d\n",a);
    ElemType eee;
    ListDelete_L(LA,2,eee);
    printf("删除的元素值:%d\n",eee);
    GetElem_L(LA,2,eee);
    printf("元素2的位置:%d\n",eee);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值