关于线性链表的操作

来源:互联网 发布:中国软件测评中心 编辑:程序博客网 时间:2024/05/16 13:40

#include <stdio.h>

#include <stdlib.h>

 

#define TRUE 1

#define OK 1

#define FALSE 0

#define OK 1

#define ERROR

#define INFEASIBLE -1

#define OVERFLOW -2

 

typedef int Status;

typedef int ElemType;

 

typedef struct LNode{

   ElemType data;

   struct LNode *next;

}LNode,*next;

 

void CreateList_l(LinkList &l,int n){

   LinkList p;

   ElemType i;

   L=(LinkList)malloc(sizeof(LNode));

   L->next=NULL;

   for(i=n;i>0;--i){

      p=(LinkList)malloc(sizeof(LNode));

      scanf("%d",&p->data);

      p->next=L->next;

      L->next=p;

   }

}

 

Status GetElem(LinkList l,int i,ElemType &e){

    LinkList p;

    ElemType 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){

    LinkList s,p;

    ElemType j;

    p=L;j=0;

    while(p&&j<i-1)  {p=p->next;++j;}

    if(!p||j>i-1)   return ERROR;

    s=(LinkList)malloc(sizeof(LNode));

    s->data=e;

    s->next=p->next;

    p->next=s;

    return OK;

}

 

Status ListDelete(LinkList &L,int i,ElemType &e){

 LinkList p,q;

 ElemType j;

 p=L;j=0;

 while(p->next&&j<i-1) {p=n-next;++j;}

 if(!p-next||j>i-1)  return ERROR;

 q=p->next;

 p->next=q->next;

 e=p->data;

 free(q);

 return OK;

}

 

 void main(){

   LinkList L,p;

   ElemType i,n,e;

   scanf("%d",&n);

   CreateList(L,n);

   for(p=L->next;p;p=p->next){

     printf(p->data);

     printf("/n");

     scanf("%d",&i);

     GetElem(L,i,e);

     printf("%d",e);

     printf("/n");

     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);

     ListDelete_L(L,i,e);

     printf("%d",e); 

     printf("/n");

     for(p=L->next;p;p=p->next)

        printf("%d",p->data);

   }

}