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

本文介绍了一个简单的线性表数据结构实现,包括初始化、插入、删除等基本操作,并通过一个交互式菜单让用户能够手动输入数据进行操作演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//线性表
#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 ;
      }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值