#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OVERFLOW -2
#define OK 1
typedef int ElemType;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void CreateList_L(LinkList &L,int n)
{
int i;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(i=n; i>0; i--)
{
LNode *p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
}
Status GetElem_L(LinkList L,int i,ElemType &e)
{
LNode *p;
int j;
p=L->next;
j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i)
return ERROR;
e=p->data;
return OK;
}
Status ListInsert_L(LinkList &L,int i,ElemType e)
{
LNode *p;
int j;
p=L;
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 LinkDelete_L(LinkList &L,int i,ElemType &e)
{
LNode *p,*q;
int j;
p=L;
j=0;
while(p->next&&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;
}
int main()
{
LNode *L, *p;
int n;
scanf("%d",&n);
CreateList_L(L,n);
for(p=L->next; p; p=p->next)
printf("%d ",p->data);
printf("\n");
int i,e;
scanf("%d",&i);
GetElem_L(L,i,e);
printf("e=%d\n",e);
scanf("%d%d",&i,&e);
ListInsert_L(L,i,e);
for(p=L->next; p; p=p->next)
printf("%d ",p->data);
printf("\n");
scanf("%d",&i);
LinkDelete_L(L,i,e);
for(p=L->next; p; p=p->next)
printf("%d ",p->data);
printf("\n");
printf("e=%d\n",e);
return 0;
}
线性表的链式表示和实现(数据结构)
最新推荐文章于 2023-07-06 16:08:38 发布