/*main.c文件*/
#include "sqelist.h" //线性表头文件
int main(void)
{
int i=0,ret=0,pos,va,l=0;
sqelist *mm = creat_sqelist(); //申请一个空闲行表
if(mm == NULL) //失败的情况
{
printf("申请失败\n");
return -1;
}
printf("输入你要传入元素的个数: ");
scanf("%d",&pos);
printf("输入你要传入的元素: ");
for(i=0;i<pos;i++)//传入10个数据
{
scanf("%d",&va);
ret=add_sqelist(mm,va);
if(ret==-2)
{
printf("越界");
break;
}
if(ret==-1)
{
printf("失败");
return -1;
}
}
printf("\n");
while(1)
{
for(i=0;i<mm->count;i++)//打印这写数据
{
printf("%d",mm->data[i]);
printf(" ");
}
printf("\n");
printf("请选择操作 1:插入 2:删除 3:改变 4:查找\n");
scanf("%d",&l);
if(l==1)
{
printf("\n请输入要插入元素的位置和大小\n");
scanf("%d %d",&pos,&va);
ret=inset_sqelist(mm,pos,va);
if(ret==-2)
{
printf("超出范围");
continue;
}
if(ret==-1)
{
printf("失败");
return -1;
}
for(i=0;i<mm->count;i++)//打印这写数据
{
printf("%d",mm->data[i]);
printf(" ");
}
}
if(l==2)
{
printf("\n请输入要删除元素的位置\n");
scanf("%d",&pos);
ret=delet_sqelist(mm,pos);
if(ret==-2)
{
printf("没有的元素");
continue;
}
if(ret==-1)
{
printf("失败");
return -1;
}
for(i=0;i<mm->count;i++)//打印这写数据
{
printf("%d",mm->data[i]);
printf(" ");
}
}
if(l==3)
{
printf("请输入要改正元素的位置\n");
scanf("%d",&pos);
printf("请输入要改正元素的值\n");
scanf("%d",&va);
ret=gai_sqelist(mm,pos,va);
if(ret==-2)
{
printf("超出范围");
continue;
}
if(ret==-1)
{
printf("失败");
return -1;
}
for(i=0;i<mm->count;i++)//打印这写数据
{
printf("%d",mm->data[i]);
printf(" ");
}
}
if(l==4)
{
printf("请输入要查询元素的位置\n");
scanf("%d",&pos);
ret=cha_sqelist(mm,pos);
printf("\n");
if(ret==-2)
{
printf("超出范围");
continue;
}
if(ret==-1)
{
printf("失败");
return -1;
}
}
printf("\n 按任意键继续!");
getchar();
getchar();
system("clear");
if((l>4)&(l<1))
printf("错误,请重新输入!\n");
}
return 0;
}
/*sqelist.c文件*/
#include "sqelist.h"
sqelist *creat_sqelist()//创建线性表
{
sqelist *sq = (sqelist *)malloc(sizeof(sqelist));
if(sq == NULL)
{
printf("malloc");
return NULL;
}
bzero(sq,sizeof(sqelist));//清空申请道德数组空间
return sq;
}
int add_sqelist(sqelist *sq,datatype va)//初始化线性表
{
if(sq == NULL)return -1;
if(sq->count>=N)return-2;
sq->data[sq->count]=va;
sq->count++;
return 0;
}
int inset_sqelist(sqelist *sq,int pos,datatype va)//插入元素
{
int i=0;
if(pos>sq->count)return-2;
if(sq == NULL)return -1;
for(i=sq->count;i>pos;i--)
{
sq->data[i]=sq->data[i-1];
}
sq->data[pos]=va;
sq->count++;
return 0;
}
int delet_sqelist(sqelist *sq,int pos)//删除元素
{
int i=0;
if(pos>=sq->count)return-2;
if(sq == NULL)return -1;
for(i=pos;i<sq->count-1;i++)
{
sq->data[i]=sq->data[i+1];
}
sq->count--;
return 0;
}
int gai_sqelist(sqelist *sq,int pos,datatype va)//改正元素
{
if(pos>=sq->count)return-2;
if(sq == NULL)return -1;
sq->data[pos]=va;
return 0;
}
int cha_sqelist(sqelist *sq,int pos)//查寻数据
{
if(pos>=sq->count)return-2;
if(sq == NULL)return -1;
printf("%d",sq->data[pos]);
return 0;
}
/*sqelist.h文件*/
#ifndef _sqelist_H
#define _sqelist_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 32
typedef int datatype;//数据的类型为 int
typedef struct
{
datatype data[N];//int类型的数组
int count ;//计数器
}sqelist;
sqelist *create_sqelist();//创建线性表
int add_sqelist(sqelist *sq,datatype va);//写入数据
int inset_sqelist(sqelist *sq,int pos,datatype va);//插入数据
int delet_sqelist(sqelist *sq,int pos);//删除元素
int gai_sqelist(sqelist *sq,int pos,datatype va);//改正数据
int cha_sqelist(sqelist *sq,int pos);//查寻数据
#endif