线性表的顺序存储结构

来源:互联网 发布:mac无法抹掉磁盘 编辑:程序博客网 时间:2024/05/15 23:43

#include <stdio.h>
#include <stdlib.h>
#define maxsize 100
typedef int elemtype;
typedef struct
{
   elemtype elem[maxsize];
   int last;
}sqlist;
sqlist l;
int size;
void displaymenu();
void creatlist(sqlist *l,int x);
void insert(sqlist *l,int i,elemtype e);
void delet(sqlist *l,int i);
int locate(sqlist *l,elemtype e);
void indicate( sqlist *l);
void main()
{
 displaymenu();
}
void displaymenu()
{
 elemtype e;
 int k,i,j;
 do
 {
 printf("1----------创建线性表\n");
 printf("2----------定位元素\n");
 printf("3----------插入元素\n");
 printf("4----------打印线性表\n");
 printf("5----------删除线性表中的元素\n");
 printf("6----------退出\n");
 printf("请输入您要进行的操作:\t\t");
 scanf("%d",&k);
 }while(k>6||k<1);
 switch(k)
 {
 case 1:
  system("cls");
  printf("请输入您要创建的线性表的大小:\t");
  scanf("%d",&size);
  creatlist(&l,size);
  getch();
  system("cls");
  displaymenu();
  break;
 case 2:
  system("cls");
  printf("请输入您要查询的元素:\t");
  scanf("%d",&e);
  locate(&l,e);
  if(locate(&l,e)<=size)
  printf("您要查询的值的位置是:%d",locate(&l,e));
  else
  printf("线性表中没有此元素...");
  getch();
  system("cls");
  displaymenu();
  break;
 case 3:
  system("cls");
  printf("请输入您要插入的元素以及插入的位置:\t");
  scanf("%d%d",&j,&e);
  insert(&l,j,e);
  getch();
  system("cls");
  displaymenu();
 case 4:
  system("cls");
  printf("按任意键显示当前线性表的内容...\n");
        indicate(&l);
  getch();
  system("cls");
  displaymenu();
 case 5:
        system("cls");
  printf("请输入你要删除的元素位置:\t\t");
  scanf("%d",&j);
  delet(&l,j);
  indicate(&l);
  getch();
  system("cls");
  displaymenu();
 case 6:
  printf("按任意键退出!");
  getch();
  exit(0);

 }
 
}
void creatlist(sqlist *l,int x)
{   int i=1;
    int m;
    for(m=0;m<x;m++)
 {
 printf("请输入您要创建的第%d个元素:\t",i);
 scanf("%d",&l->elem[m]);
 i++;
 l->last++;
 }
}
int locate(sqlist *l,elemtype e)
{
 int loc=0;
 while(loc<size&&l->elem[loc]!=e)
 {
       loc++;
 }
 if(loc<=size)
 return(loc+1);
 else
    return(-1);
}
void insert(sqlist *l,int i,elemtype e)
{
 int n;
 if(i>l->last+1||i<1)
 {
  printf("插入位置不合法,请重新插入...");
 }
 else if(l->last+1>maxsize)
 {
  printf("内存溢出!");
 }
 else
 {
  size++;
  for(n=l->last;n>=i;n--)
  {
   l->elem[n]=l->elem[n-1];
  }
  l->elem[i-1]=e;
  printf("插入成功!");
  getch();
 }
}
void indicate(sqlist *l)
{
 int i;
 int space=1;
 for(i=0;i<size;i++)
 {
   printf("%d\t\t",l->elem[i]);
  if(space%5==0)
  {
   printf("\n");
  }
  space++;
 }

}
void delet(sqlist *l,int i)
{
 elemtype e;
 int loc;
 e=l->elem[i-1];
 for(loc=i;loc<=size;loc++)
 {
  l->elem[loc-1]=l->elem[loc];
 }
 size--;
}

原创粉丝点击