#include <stdio.h>
#include <malloc.h>
#define OK 1;
#define ERROR 0;
typedef int Status;
typedef int ElemType;
//定义结构体
struct LNode
{
ElemType data;
struct LNode* next;
};
typedef struct LNode* Linklist;
//初始化
Status InitList(LinkList* L)
{
L=(LinkList)malloc(sizeof(struct LNode));
if(!L)
{
printf("初始化失败!");
}
L->next=NULL;
return OK;
}
//取值
Status GetElem(LinkList L,int i,ElemType * e)
{
LinkList p;
int j=1;
p=L->next;
while(p&&j<i)
{
p=p->next;
j++;
}
*e=p->data;
return OK;
}
//查找
int LocateElem(LinkList L,ElemType e)
{
LinkList p;
int j=1;
p=L->next;
while(p&&p->data!=e)
{
p=p->next;
j++;
}
if(!p) return ERROR;
return j;
}
//插入
Status ListInsert(LinkList* L,int i,ElemType e)
{
LinkList p,q;
int j=1;
p=(*L)->next;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i-1) return ERROR;
q=(LinkList)malloc(sizeof(struct LNode));
q->data=e;
q->next=p->next;
p->next=q;
return OK;
}
//删除
Status DleteleList(LinkList* L,int i,ElemType *e)
{
LinkList p,q;
int j=1;
p=(*L)->next;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p->next||j>i-1) return ERROR;
q=p->next;
p->next=q->next;
*e=q->data;
free(q);
return OK;
}
//头插法
void CreateList_F(LinkList* L,int n)
{
LinkList p;
int i;
*L=(LinkList)malloc(sizeof(struct LNode));
(*L)->next=NULL;
for(i=n;i>0;i--)
{
p=(LinkList)malloc(sizeof(sturct LNode));
scanf("%d",&p->data);
p->next=(*L)->next;
(*L)->next=p;
}
}
//尾插法
void CreateList_L(LinkList * L,int n)
{
LinkList p,q;
*L=(LinkList)malloc(sizeof(struct LNode));
q=*L;
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(struct LNode));
scanf("%d",&p->data);
q->next=p;
q=q->next;
}
p->next=NULL;
}
Status ListTraverse_L(LinkList L,void(*ptr)(ElemType))
{
LinkList p;
p=L->next;
while(p)
{
ptr(p->data);
p=p->next;
}
printf("\n");
return 0;
}
void visit(ElemType c)
{
printf("%d",c);
}
void main()
{
LinkList L;
int n,i,j;
ElemType e,e1;
printf("请输入链表的长度:\n");
scanf("%d",&n);
CreateList_L(&L,n);
printf("请输入要查找的元素:\n");
scanf("%d",&e);
printf("该元素的位置:%d\n",LocatElem(&L,e));
printf("请输入要查找的元素:\n");
scanf("%d",&e);
printf("该元素的位置:%d\n",LocatElem(&L,e));
printf("请输入要插入的元素和位置:\n");
scanf("%d %d",&e,&i);
ListInsert(L,i,e);
ListTraverse_L(L,visit);
printf("请输入要插入的元素和位置:\n");
scanf("%d %d",&e1,&j);
ListInsert(L,j,e1);
ListTraverse_L(L,visit);
printf("请输入要删除的元素的值和位置:\n");
scanf("%d %d",&e,&i);
ListDelete(L,i,&e);
printf("新的链表:\n");
ListTraverse_L(L,visit);
}
数据结构 || 单链表的操作(一)
猜你喜欢
转载自blog.csdn.net/weixin_44594976/article/details/89344572
今日推荐
周排行