数据结构--顺序表的建议和删除


顺序表的建立和删除





#include <stdio.h>
#include <stdlib.h>

#define OK   1
#define ERROR  0
#define ElemType int
#define MAXSIZE  100  /*此处的宏定义常量表示线性表可能达到的最大长度*/
typedef  struct
{
ElemType  elem[MAXSIZE];  /*线性表占用的数组空间*/
int       last;    /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/
}SeqList;

void initial(SeqList *v)         //初始化线性表
{//初始化线性表
int i;
printf("请输入初始线性表长度:n="); //输入线性表初始化时的长度
scanf("%d",&v->last);
printf("请输入从1到%d的各元素\n",v->last);
getchar();
for(i=0;i<v->last;i++) scanf("%d",&v->elem[i]); //输入线性表的各元素
v->last--;
}

int  InsList(SeqList *L,int i,ElemType e)      //在线性表中插入元素
{
int k;
if(i<1||(i>L->last+2))
{
  printf("插入位置i值不合法");
  return(ERROR);
}
if(L->last>=MAXSIZE-1)
{
  printf("表已满,无法插入");
  return(ERROR);
}
for(k=L->last;k>=i-1;k--)
  L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;
L->last++;
return(OK);
//实验完成该部分的内容
}

int  DelList(SeqList *L,int i,ElemType *e)   
/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值为1≤i≤L.last+1 */  
{
int k;
if(i<1||(i>L->last+2))
{
  printf("删除位置不合法!");
  return(ERROR);
}
*e=L->elem[i-1];
for(k=i;k<=L->last;k++)
  L->elem[k-1]=L->elem[k];
L->last--;
return(OK);
//实验完成该部分的内容
}

int  Locate(SeqList L, ElemType e)  
{
int i;
i=0;
while((i<=L.last)&&(L.elem[i]!=e))
  i++;
if(i<=L.last)
  return(i+1);
else
  return(-1);
//实验完成该部分的内容
}
void print(SeqList S)
{
int i;
for(i=0;i<=S.last;i++)
  printf("%5d",S.elem[i]);
printf("\n");
}

void main()
{SeqList S;      //S为一线性表
int loc,flag=1;
char j;
int ch;
int temp;
printf("本程序用来实现顺序结构的线性表。\n");
printf("可以实现查找、插入、删除等操作。\n");
initial(&S);         //初始化线性表
while(flag)
    { printf("请选择:\n");
      printf("1.显示所有元素\n");
      printf("2.插入一个元素\n");
      printf("3.删除一个元素\n");
      printf("4.查找一个元素\n");
      printf("5.退出程序    \n");
      scanf(" %c",&j);
      switch(j)
{case ’1’:print(S); break; //显示所有元素
  case ’2’:{printf("请输入要插入的元素和插入位置:\n");
     printf("格式:数据,位置;例如:a,2\n");
     scanf(" %d,%d",&ch,&loc);  //输入要插入的元素和插入的位置
     temp=InsList(&S,loc,ch);     //插入
     if(temp==ERROR)  printf("插入失败!\n");  //插入失败
                   else  {printf("插入成功!\n");   print(S);} //插入成功
     break;
    }
  case ’3’:{printf("请输入要删除元素的位置:");
     scanf("%d",&loc);    //输入要删除的元素的位置
     temp=DelList(&S,loc,&ch);  //删除
     if(temp==OK) printf("删除了一个元素:%d\n",ch); //删除成功
     else printf("该元素不存在!\n");  //删除失败
     print(S);
     break;
    }
  case ’4’:{printf("请输入要查找的元素:");
     scanf(" %d",&ch);      //输入要查找的元素
     loc=Locate(S,ch);      //定位
     if(loc!=-1) printf("该元素所在位置:%d\n",loc); //显示该元素位置
     else    printf("%c 不存在!\n",ch);//当前元素不存在
     break;
    }
  default:flag=0;printf("程序结束,按任意键退出!\n");
}
    }
getchar();
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章