#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);
}
12-24
1万+
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交