顺序表

来源:互联网 发布:国外怎么看歼20知乎 编辑:程序博客网 时间:2024/04/30 12:41

线性表顺序存储的相关操作 

发表于:2010-09-10 18:41 | 分类:个人日记 阅读:(14) 评论:(0) 

源代码:

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define list_size 100

#define list_add 100

typedef struct

{//用结构体表示顺序表

int *elem;

int length;

int listsize;

}Sqlist;

//构造一个空的线性列表

int initlist(Sqlist &l){

 l.elem = (int *)malloc(list_size*sizeof(int));

 if(!l.elem){

        printf("Can not to allocate memory!");

  exit(1);

 }

 l.length=0;

 l.listsize=list_size;

 return 1;

}

//向线性表中插入元素

int InitLinklist(Sqlist &L, int n)

{

int *p,i;

if(n>L.listsize)

L.elem=(int*)realloc(L.elem,sizeof(int)*(list_size+list_add));

L.listsize+=list_add;

}

if(!L.elem)

exit(1);

p=L.elem;

for(i=0;i<n;i++)

{

scanf("%d",p);

printf("%4d",*p);

p++;

++L.length;

}

printf("/n");

return 1;

}

//插入元素

int listinsert(Sqlist &l,int i,int e)

{

 int *newbase,*q,*p;

    if(i<1||i>l.length+1)

  return 0;

 if(l.length>l.listsize){

  newbase=(int *)realloc(l.elem,(l.listsize+list_add)*sizeof(int));

  if(!newbase){

   printf("Can not to allocate memory!");

   exit(1);

  }

  l.elem=newbase;

  l.listsize+=list_add;

 }

 q=&(l.elem[i-1]);

 for(p=&(l.elem[l.length-1]);p>=q;--p)

  *(p+1)=*p;

 *q=e;

 ++l.length;

 return 1;

}

//删除元素

int listdelete(Sqlist &l,int i,int &e)

{

 int *p,*q;

 if((i<1)||(i>l.length))

  return 0;

 p=&(l.elem[i-1]);

 e=*p;

 q=l.elem+l.length-1;

 for(++p;p<=q;++p)

  *(p-1)=*p;

 --l.length;

 return 1;

}

//查找元素

int locate(Sqlist l,int e){

 int *p;

 int i=1;

 p=l.elem;

 while(i<l.length){

  if(*p++!=e){

            ++i;

  }

  else

   break;

 };  

 if(i<=l.length)

  return i;

 else 

  return 0;

}

 

int main()

{

 int choice,e,i,k,m;

 int *a,*b;

 Sqlist la;

 initlist(la);

 printf("请输入顺序线性表的长度:");

 scanf("%d",&m);

 printf("请输入线性表的%d元素:",m);

    InitLinklist(la,m);

 printf("0.退出操作/n");

 printf("1.增加元素/n");

 printf("2.删除元素/n");

 printf("3.查找元素/n");

 

 printf("请输入你要执行的操作:");

 while(scanf("%d",&choice)!=EOF){

  

  if(choice==0)

   return 0;

  else if(choice==1){

   printf("请输入你要增加的位置及元素:");

   scanf("%d %d",&i,&e);

      k=listinsert(la,i,e);

   if(k==1){

    for(a=la.elem;a<(la.elem+la.length);a++)

        printf("%5d",*a);

    printf("/n");

   }

   else

    printf("操作失败!");

  }

  else if(choice==2){

   printf("请输入你要删除的位置及元素:");

   scanf("%d %d",&i,&e);

   k=listdelete(la,i,e);

   if(k==1){

    for(a=la.elem;a<(la.elem+la.length);a++)

        printf("%5d",*a);

    printf("/n");

   }

   else

    printf("操作失败!");

  }

  else{

   printf("请插入查找的元素:");

   scanf("%d",&e);

   k=locate(la, e);

   if(k!=0)

      printf("查找的元素在第%d个位置/n",k+1);

   else

    printf("线性表中没有此元素/n");

  }

  printf("请输入你要执行的操作:");

 }

}

 

原创粉丝点击