线性表的顺序和链式存储表示及基本操作的实验

来源:互联网 发布:方便面行业数据分析 编辑:程序博客网 时间:2024/05/16 18:48

顺序存储:

  #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LIST_INIT_SIZE  100
#define LISTINCREMENT 10
#define OK 1;
#define ERROR -1;
typedef int ElemType;
typedef struct
{ ElemType *elem;
int length;
int listsize;
}sqlist;
 int initlist_sq(sqlist *l)
  {  int i,s ;
   (*l).elem=(ElemType *)malloc(  LIST_INIT_SIZE*sizeof( ElemType));
     if (!((*l).elem))
          return  ERROR;
     (*l).length=0;
     (*l).listsize=LIST_INIT_SIZE;
   puts("/nput into  10 integer:");
    for(i=0;i<10;i++)
    { scanf("/n%d",&s);
       (*l).elem[i]=s;
    }
    (*l).length=10;
    return OK;
  }

int locateElem(sqlist l , ElemType e )
   { ElemType *p=l.elem;
     int j=1;
    while(j<=l.length&&((*p++)!=e))
      {   ++j;  }
   if(j<=l.length)
    {
    printf ("/nis found,the locate is %d",j);
    }
   else
   {printf("/n  not found");}
   }
int listinsert_sq(sqlist *l ,int i ,  ElemType e )
  {  int j;
   ElemType *newbase ,*q,*p;
    if (i<1||i>(*l).length+1)
        return ERROR;
   if ((*l).length>=(*l).listsize)
      { newbase=(ElemType*)realloc((*l).elem,((*l).listsize+LISTINCREMENT)*sizeof(ElemType));
        if(!newbase)
           return ERROR;
  (*l).elem=newbase;
           (*l).listsize+= LISTINCREMENT;
       }
    q=&((*l).elem[i-1]) ;
    for(p=(*l).elem+(*l).length-1;p>=q;p--)
    {  *(p+1)=*p;
     }
     *q=e;
     ++(*l).length;
     puts("/nthe new insert_squence is :/n");
     for(i=0;i<(*l).length; i++)
      { printf("%d",(*l).elem[i]);
       }
   return OK;
   }
int listdelete_sq(sqlist *l, int i )
   { ElemType *q, *p;
     int j ;
     if (i<1||i>(*l).length)
        return ERROR;
     p=&((*l).elem[i-1]);
     q=(*l).elem+(*l).length-1;
    for(++p;p<=q;++p)
      { *(p-1)=*p;
      }
     --(*l).length;
     puts("the new delete_squence is :");
   for(j=0;j<(*l).length;j++)
      {printf("%d",(*l).elem[j]);}
       return OK;
}
main()
   { sqlist list;
     ElemType x ,k ,m;
     int  j;
     clrscr();
  initlist_sq(&list);
  printf("/ndo locate:  input one integer/n");
                scanf("%d", &k);
         locateElem(list , k );
    printf("/n do insert :input two integer/n");
                scanf("%d%d" , &j,&m);
          listinsert_sq(&list,j,m);
    printf("/ndo delete: input one integer again/n");
                scanf("%d",&x);
          listdelete_sq(&list,x);
                puts("/nthe program is end");


}

链式存储:

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OK 1;
#define ERROR -1;
typedef int ElemType;
typedef struct LNode
{ ElemType data;
  struct LNode  *next;
}LNode ,*LinkList;

 void creatlist_L(LinkList *L,int n)
  {   LNode *q,*p;

       int i;
       L=( LinkList *)malloc( sizeof(LNode));
      /* L->next=NULL;  */
       for(i=n;i>0;--i)
       { p=( LinkList )malloc( sizeof(LNode));
  scanf("%5d",&(p->data));
  p->next=L->next;
  L->next=p;
  }
        q=L->next;
       while(q->next!=NULL)
       {  printf("%5d",q->data);
          q=q->next;
         }

}
int getElem_L(LinkList L ,int i,ElemType *e )
   { struct LNode *q,*p;
     int j=1;
     q=L->next;j++;
    while(q&&j<i)
      { q=q->next;
    ++j;  }
   if(q->next==NULL||j>i)   {puts("Error");printf("/n  not found");}
     else
     { e=q->data;
    printf ("/nis found,the locate is %5d %5d",j,e);}
     return OK;
    }
int List insert_L(LinkList *L ,int i ,ElemType e)
  { struct *q,*p;
    q=L;j=0;
    while(q&&j<i-i)
     {q=q->next;++j;}

    if(!q||j>i-1){puts("illegal sites");}
    else
    {   s=(LinkList)malloc(sizeof(LNode));
       s->data=e;s->next=q->next;
       q->next=s;
    }
      puts("/nthe new LinkList is :/n")
       q=L->next;
       while(q->next!=null)
       {  printf("%5d",q->data);
          q=q->next;
         }
     return  OK;
}


int listdelete_L(LinkList *L, int i,ElemType &e )
   { ElemType *q, *p;
     int j =0;
     q=L;
     while(q->next&&j<=i-1)
     {q=q>next;
      ++j;}
     if(!q->next&&j>i-1)
         {puts("illegal sites");}
     else
     {p=q->next;q->next=p->next;
     e=q->data;  free(p);
     }
     put("/nthe delete nunber is %5d:",e)

     puts("/nthe new LinkList is :/n")
     q=L->next;
       while(q->next!=null)
       {  printf("%5d",q->data);
          q=q->next;
         }
     return  ok;
}


main()
   { LinkList *list;
     ElemType m;
     int  j,n;
     clrscr();
  puts("/nthe number list_LNode %5d ,please ");
                        scanf("%5d,&n");
   creatlist_L(*list , n);
  printf("/ndo locate:  input one integer/n");
                        scanf("%5d", &j);
          getElem_L( list , int j ,&m);
    printf("/n do insert :input two integer,one is locate,one is LNode:/n");
                        scanf("%d%d" , &j,&n);
   List insert_L(*list,int j,n );
    printf("/ndo delete: input one integer again, locate site is :");
                         scanf("%5d",&j);
           listdelete_L(*list, int j, &m );
                         puts("/nthe program is end");


}

 





原创粉丝点击