坚持每天至少一百行。练习数据结构线性表

来源:互联网 发布:mmd口型数据 编辑:程序博客网 时间:2024/04/26 20:40

//线性表
#include<stdlib.h>
#include<curses.h>
#include<stdio.h>
#define maxsize 1024
typedef int datatype;
typedef struct {
  datatype data[maxsize];
  int last;
}sequenlist;
void init(sequenlist *L)
{
  //  L=(sequenlist *)malloc(sizeof(sequenlist));
  L->last=0;
}
int insert(sequenlist *L,datatype x,int i)
{
  int j;
  if(L->last>=maxsize-1)
    { printf("overflow/n");return 0;}
  else if(i<1 ||i>L->last+2)
    printf("插入位置非法/n");
  else
    {
      for(j=L->last;j>=i-1;j--)
    L->data[j+1]=L->data[j];
      L->data[i-1]=x;
      L->last=L->last+1;
    }
  return 1;
}
int delete(sequenlist *L,int i)
{
  if(i<1 || i>L->last+1)
    { printf("删除元素非法/n"); return 0;}
  else
    {
      for(int j=i;j<L->last;j++)
    L->data[j]=L->data[j+1];
      L->last=L->last-1;
    }
  return 1;
}
void display(sequenlist *L)
{
  for(int i=0;i<L->last;i++)
    printf("%d ",L->data[i]);
}
/*
int main()
{
  sequenlist L;
  init(&L);
  insert(&L,5,1);
  insert(&L,3,2);
  display(&L);
  delete(&L,3);
  display(&L);
  return 0;
}
*/

main()
{
  sequenlist *L;
  int i,ch,n;
  while(1)
    {
      printf("/n   请选择:");
      printf("/n(1) 输入顺序表:");
      printf("/n(2) 插入数据");
      printf("/n(3) 删除数据");
      printf("/n(4) 结束/n");
      ch=getchar();
      switch(ch){
      case '1':printf("/n请输入顺序表中数据的个数n=");
    scanf("%d",&n);
    printf("/n");
    L=(sequenlist *)malloc(sizeof(sequenlist));
    for(i=0;i<n;i++)
      {
        printf("/n请输入插入顺序表中第%d个数据的值",i+1);
        scanf("%d",&L->data[i]);
      }
    L->last=n-1;
    printf("/n输入顺序表数据为");
    for(i=0;i<=L->last;i++)
      printf("%d ",L->data[i]);
    printf("/n");
    break;
      case '2':printf("/n请输入插入顺序表中的数据");
    scanf("%d",&n);
    printf("/n请输入插入顺序表中的位置");
    scanf("%d",&i);
    printf("/n");
    if(insert(L,n,i))
      {
        printf("/n插入后的数据顺序表为:");
        for(i=0;i<=L->last;i++)
          printf("%d ",L->data[i]);
        printf("/n");
      }
    break;
      case '3':printf("/n请输入删除数据的位置");
    scanf("%d",&i);
    printf("/n");
    if(delete(L,i))
      {
        printf("/n删除后的数据顺序表为:");
        for(i=0;i<L->last;i++)
          printf("%d ",L->data[i]);
        printf("/n");
      }
    break;
      case '4':return ;
      }

    }
}