#include<stdio.h>
#include<stdlib.h>
#define OK 0
#define ERROR 1
#define OVERFLOW 2
typedef int Status;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
LNode *next;
}LNode,*Linklist;
bool InitList(Linklist &L)
{
L = new LNode();
if(!L) return false;
L->next = 0;
return true;
}
Status GetElem(Linklist L,int i)
{
LNode *p=L->next;
int j=1;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i)
return ERROR;
int e=p->data;
printf("%5d",e);
return e;
}
Status ElemInsert(Linklist &L)
{
int i;
int e;
printf("请输入您要插入的元素的位置和元素的值:");
scanf("%d",&i);
scanf("%d",&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));
if(!s) exit(OVERFLOW);
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
Status ElemDelete(Linklist &L,int i)
{
LNode *p=L;
int j=0;
while(p->next&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
return ERROR;
LNode *q=p->next;
p->next=q->next;
ElemType e=q->data;
free(q);
return OK;
}
int ListLength(Linklist L)
{
LNode *p = L;
int length = 0;
while(p->next)
{
length++;
p=p->next;
}
printf("%d\n",length);
return length;
}
int Search(Linklist &L,int i)
{
LNode *p=L;
int j=0;
while(p->next&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
return ERROR;
/*LNode *q=p->next;
p->next=q->next;
ElemType e=q->data;*/
printf("您要查找的元素为:");
printf("%d",p->next->data);
return OK;
}
int main()
{
int temp;
int temp_del;
Linklist L;
InitList(L);
printf("请输入您要插入的元素的个数:");
scanf("%d",&temp);
for(int i=1;i<=temp;i++)
ElemInsert(L);
printf("您输入的L为:");
for(i=1;i<=temp;i++)
GetElem(L,i);
printf("\n链表L的长度为:");
ListLength(L);
printf("请输入您要查找的元素的位置:");
scanf("%d",&temp_del);
Search(L,temp_del);
printf("\n");
printf("请输入您要删除的元素的位置:");
scanf("%d",&temp_del);
ElemDelete(L,temp_del);
printf("您输入的L删除元素后为:");
for(int a=1;a<=temp+1;a++)
GetElem(L,a);
printf("\n删除元素后的长度为:");
ListLength(L);
return 0;
}
链表的实现
最新推荐文章于 2022-07-04 09:39:15 发布