用c写的线性表的顺序实现

/*
 线性表的顺序实现
*/
#include "stdio.h"
#include "malloc.h"
#define maxsize 1024
typedef char datatype;//此处要用 ';'
typedef struct
{
 datatype data[maxsize];
 int last;
}sequenlist;//此处用';'

/*
 在第i个元素前插入元素x(注意从0开始计数)
*/

int insert(sequenlist *L,datatype x,int i)
{
 int j;
 if(L->last==maxsize-1)//如果原线性表已满
 {
  printf("overflow");
  return 0;
 }
 else if((i<0)||(i>L->last))//如果输入的i值超出范围
 {
  printf("error,please input the right 'i' ");
  return 0;
 }
 else
 {
  for(j=L->last;j>=i;j--)//从第i个元素起,每个元素后移一位
  {
   L->data[j+1]=L->data[j];
  }
  L->data[i]=x;
  L->last=L->last+1;
 }
 return (1);
}
/*
 删除第i个元素,注意:元素从0开始计数
*/
int dellist(sequenlist *L,int i)
{
 if((i<0)||(i>L->last))
 {
  printf("error,please input the rigth 'i' ");//如果输入的i值超出范围
  return 0 ;
 }
 else
 {
  for(;i<L->last;i++)//从第i+1个元素起,每个元素前移一位
  {
   L->data[i]=L->data[i+1]; 
  }
   L->last=L->last-1;
   return (1);
 }
}

/*建立顺序表,注意:其元素为单个字符*/
void createlist(sequenlist *L)
{
 int i,n;
 char tmp;
 printf("请输入数据的个数:/n");
 scanf("%d",&n);
 for(i=0;i<n;i++)
 {
  printf("data[%d]=",i);
  fflush(stdin);//清除键盘缓冲区
  scanf("%c",&tmp);
  L->data[i]=tmp;
 }
 L->last=n-1;
 printf("/n");
}

/*
 打印顺序表
*/
void printout(sequenlist *L)
{
 int i;
 for(i=0;i<=L->last;i++)
 {
  printf("data[%d]=",i);
  printf("%c/n",L->data[i]);
 }
}
void main()
{
 sequenlist *L;
 char cmd,x;
 int i;
 L=(sequenlist*)malloc(sizeof(sequenlist));/*指针在使用前要初始化*/
 createlist(L);
 printout(L);
 do
 {
  printf("i,I.....插入/n");
  printf("d,D.....删除/n");
  printf("q,Q.....退出/n");
  do
  {  
   printf("请选择您想要的操作:/n");
   fflush(stdin);//清除键盘缓冲区
   scanf("%c",&cmd);
  }while((cmd!='i')&&(cmd!='I')&&(cmd!='d')&&(cmd!='D')&&(cmd!='q')&&(cmd!='Q'));
  switch(cmd)
  {
   case 'i':
   case 'I':
    printf("请输入您要插入的数据:");
    fflush(stdin);
    scanf("%c",&x);
    printf("请输入您要插入的位置:");
    scanf("%d",&i);
    insert(L,x,i);
    printout(L);
    break;
   case 'd':
   case 'D':
    printf("请输入你要删除元素的位置:");
    fflush(stdin);
    scanf("%d",&i);
    dellist(L,i);
    printout(L);
    break;
  }
 }while((cmd!='q')&&(cmd!='Q'));
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值