#include<stdio.h>
#include<stdlib.h>
#define Status int
//数据类型
typedef struct
{
int number;
}ElemType;
//结点类型
typedef struct LNode
{
LNode *next;
ElemType data;
int Length;
}LNode,*LinkList;
//初始化链表
Status InitList(LinkList &L)
{
if(!L)
{
L = (LNode *)malloc(sizeof(LNode));
L->next = NULL;
L->Length = 0;
return 1;
}
return 0;
}
//插入结点
Status InsertElem(LinkList &L,int i, ElemType e)
{
LNode *p;
int j=0;
p = L; //头指针
while(p && j<i-1)
{
p = p->next; //从第一个结点向后查找
j++;
}
if(!p || i<=0) return 0;
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = NULL;
s->next = p->next;
p->next = s;
L->Length++;
return 1;
}
//删除节点
Status DeleteElem(LinkList &L, int i, ElemType &e)
{
LNode *p,*q;
int j=0;
p = L;
while(p && j<i-1)
{
p = p->next;
j++;
}
if(!p || i<=0) return 0;
q = p->next;
p->next = q->next;
e = q->data;
printf("删除的结点值为%d",e);
free(q);
L->Length--;
return 1;
}
//查找结点
Status LocateList(LinkList L, ElemType e)
{
if(!L)
return 0;
int i = 0;
LNode *p;
p = L;
while(p)
{
if(p->data.number != e.number)
{
p = p->next;
i++;
}
else
break;
}
if(!p)
return 0;
return i;
}
//返回结点
Status GetElem(LinkList L, int i, ElemType &e)
{
int j=0;
LNode *p = L;
while(p && j<i)
{
p = p->next;
j++;
}
if(!p || i<=0) return 0;
e = p->data;
return e.number;
}
//销毁链表
Status DestoryList(LinkList &L)
{
if(!L)
return 0;
LNode *p,*q;
p = L;
while(p)
{
q = p->next;
free(p);
p = q;
}
return 1;
}
//主函数
void main()
{
LinkList L;
L = NULL;
InitList(L);
int i;
int num;
ElemType e;
ElemType a;
printf("插入链表\n");
for(i=1;i<4;i++)
{
scanf("%d",&num);
e.number = num;
InsertElem(L,i,e);
}
printf("查找结点\n");
a.number=2;
int pos = LocateList(L,a);
printf("结点a的位置是%d\n",pos);
printf("删除结点\n");
DeleteElem(L,2,a);
printf("删除的结点值为%d\n",a.number);
}
【数据结构-C语言实现】链表及其操作函数
最新推荐文章于 2023-02-08 20:02:23 发布