对顺序表的基本操作

作者在 2007-12-24 13:54:33 发布以下内容

顺序表是一种最基本、最简单、也是最常用的数据结构,下面的程序演示了对顺序表的基本操作。

#include <stdio.h>
#include <stdlib.h>
#define LIST_INTSIZE 50
typedef char DataType;
typedef struct
{
DataType* elem;    //顺序表的基地址
int length;        //顺序表当前长度
int listsize;      //顺序表当前分配的存储容量
}SeqList;
int InitSeqList(SeqList* L)    //初始化顺序表
{
L->elem=(DataType *)malloc((LIST_INTSIZE+1)*sizeof(DataType));
if (L->elem==NULL)
   {
     printf("\t\t\t内存分配错误\n");
     return 0;
   }
L->length=0;
L->listsize=LIST_INTSIZE;
printf("\t\t\t内存分配成功");
return 1;
}
int InsertSeqList(SeqList* L,int i,DataType x) //对顺序表进行插入操作,插入格式如(1,a)
{
int j;
if (L->length==L->listsize)
    {
      printf("\t\t\t顺序表已满");
      return 0;
    }

else
{
   if (i<1||i>L->length+1)
{
       printf("\t\t\t位置不合法");
       return 0;
    }

    else
      {
        for(j=L->length;j>=i;j--)
          {
            L->elem[j+1]=L->elem[j];
          }
   L->elem[i]=x;
   L->length++;
        return 1;
      }
}
}
int DeleteSeqList(SeqList* L,int i) //对顺序表进行删除操作
{
int j;
if (i<1||i>L->length)
    {
      printf("\t\t\t不存在第i个元素");
      return 0;
    }
else
    {
      for (j=i;j<L->length;j++)
        {
          L->elem[j]=L->elem[j+1];
        }
   L->length--;
      return 1;
    }

}
int LenSeqList(SeqList* L) //求顺序表表长
{
int n=0;
int i=1;
for (i=1;i<=L->length;i++)
    {
      n++;
    }
return n;
}
int SearchSeqList(SeqList* L,DataType x) //按值查找
{

int j=1;
while (j<=L->length && L->elem[j]!=x)
   j++;
if(j>L->length)
{
   printf("\t\t\t找不到你要的值,请重新输入");
   return (0);
}
else
   return j;
}
DataType GetfromSeqList(SeqList* L,int i) //按位置查找
{
DataType x;
if(i<1||i>L->length)
    {
      printf("\t\t\t查找位置不合法");
      return 0;
    }
else
    {
      x=L->elem[i];
      return x;
    }
}
void ShowSeqList(SeqList* L) //显示顺序表
{
int i;
printf("\n\t\t\t显示线性表的所有元素: ");
if (L->length==0)
    {
      printf("\n\t\t\t链表为空");
    }
else
    {
      printf("\n\t\t\t");
      for(i=1;i<=L->length;i++)
        {
          printf("\t%c",L->elem[i]);
        }
    }
}
main()
{
int choice;
int i,n=0;
int j=1;
SeqList L;
DataType x;
while(j)
    {
      printf("\n\n\n\n");
      printf("\t\t\t--线性顺序表--\n");
      printf("\n\t\t\t*****************************************");
      printf("\n\t\t\t*      1-----顺序表初始化              **");
      printf("\n\t\t\t*      2-----插        入              **");
      printf("\n\t\t\t*      3-----删        除              **");
      printf("\n\t\t\t*      4-----求   表   长              **");
      printf("\n\t\t\t*      5-----按 值 查 找              **");
      printf("\n\t\t\t*      6-----读 取 元素值              **");
      printf("\n\t\t\t*      7-----显 示 线性表              **");
      printf("\n\t\t\t*      0-----退        出              **");
      printf("\n\t\t\t*****************************************\n");
      printf("\t\t\t请选择菜单号(0--7): ");
      scanf("%d",&choice);getchar();
      if(choice==1)
        {
          InitSeqList(&L);
        }
      else if(choice==2)
        {
          printf("\n\t\t\t请输入位置i和数值x(输入格式: i,x):");
          scanf("%d,%c",&i,&x);
          InsertSeqList(&L,i,x);
        }
      else if(choice==3)
        {
          printf("\n\t\t\t请输入要删除元素的位置i(输入格式:i)");
          scanf("%d",&i);
          DeleteSeqList(&L,i);
    printf("\n\t\t\t删除成功");
        }
      else if(choice==4)
        {
          n=LenSeqList(&L);
    printf("\n\t\t\t线性表的表长为:%d",n);
        }
    else if(choice==5)
        {
    printf("\n\t\t\t请输入要查找的值x(输入格式:x):");
    scanf("%c",&x);
          i=SearchSeqList(&L,x);
    printf("\n\t\t\t你查找值的位置为:%d",i);

        }
   else if(choice==6)
        {
    printf("\n\t\t\t请输入要查找的位置i(输入格式:i):");
          scanf("%d",&i);
          x=GetfromSeqList(&L,i);
    printf("\n\t\t\t你查找的值为:%c",x);
        }
      else if(choice==7)
        {
          ShowSeqList(&L);
        }
      else if(choice==0)
        {
          j=0;
          printf("\t\t\t程序结束!\n");
        }
      else printf("\n\t\t\t输入错误!请重新输入!\n");
    }
}

数据结构与算法 | 阅读 2518 次
文章评论,共0条
游客请输入验证码
浏览68068次