实验名称:线性表的动态操作
实验目的:实践线性表的动态分配,删除,查看,删除。
实验内容:使用动态分配分配线性表空间,
使用结构体定义空间大小,
使用指针,函数对线性表的插入删除。
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define MAX 100
int n;
typedef int Status;//函数类型
typedef int ElemType;//线性表动态分配顺序存储结构
初始化线性表
typedef struct{
ElemType *elem; //存储空间基值
int length;//当前长度
int listsize;//分配空间大小
}SqlList;
Status Allogation(SqlList
*L)
{
L->elem = (int
*)malloc(MAX* sizeof(int));
if(!L->elem){
printf("线性表创造失败!");
exit(ERROR);
}
L->length=0;
L->listsize=MAX;
printf("线性表创造成功。");
return(OK);
}
//对线性表赋值
Status Inlist(SqlList *L)
{
int i;
printf("输入顺序表有多少个元素:");
scanf("%d",&n);
for(i=1;i<=n;i++)
L->elem[i-1]=i;
L->length=n;
return OK;
}
//输出线性表
void Print(SqlList L)
{
int i;
for(i=1;i<=L.length;i++)
printf("%d ",L.elem[i-1]);
printf("\n");
}
//插入
Status Insrt(SqlList *L,int
i,int x)
{
int j;
if(i<1||i>L->length)
{
printf("插入失败!");
return(ERROR);
}
if(L->length==MAX) return ERROR;
for(j=L->length-1;j>=i-1;j--)
{
L->elem[j+1]=L->elem[j];
}
L->elem[i-1]=x;
L->length++;
}
//删除
Status Delete(SqlList *L,int
i)
{
int j;
if(i<1||i>L->length+1)
{
printf("删除失败!");
return(ERROR);
for(j=i-1;j<L->length-1;j++)
{
L->elem[j]=L->elem[j+1];
}
L->length--;
return OK;
}
}
查看
Status Find(SqlList L,int i)
{
int j;
if(i<1||i>L.length+1)
{
printf("查找失败!");
return(ERROR);
}
printf("%d",L.elem[i-1]);
printf("\n");
}
主函数
int main()
{
SqlList L;
int i,j,n,a;
Allogation(&L);
Inlist(&L);
Print(L);
do
{
printf("输入要执行的操作 1.查看 2.删除 3.插入 4.退出:");
scanf("%d",&n);
switch(n)
{
case 1:{
printf("请输入要查看的位置:") ;
scanf("%d",&i);
Find(L, i);
}
break;
case 2:{
printf("请输入要删除的位置:") ;
scanf("%d",&i);
Delete(&L, i);
Print(L);
}
break;
case 3:{
printf("请输入要插入的位置,信息:") ;
scanf("%d%d",&i,&a);
Insrt(&L,i,a);
Print(L);
}
break;
case 4:break;
}
}while(n>0&&n<4);
return 0;
}