您的位置:首页 > 理论基础 > 数据结构算法

【数据结构】线性表基本操作

2014-09-19 11:04 393 查看
//author:东方肖海 QQ:467064265
//version:1.0
//线性表的顺序存储结构
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
//定义结构体
typedef int ElemType;
typedef struct SqList
{
ElemType data[MAXSIZE];
int length;
}SqList;
//构造一个空顺序表L
SqList *init_SqList()
{
SqList *L;
L=(SqList *)malloc(sizeof(SqList));
if(!L)
{
exit(1);
}
L->length=0;
return L;
}
//初始化链表(为链表附初始值)
SqList *Start_SqList(SqList *L,int i,ElemType x)
{
if(!L)
{
printf("线性表为空\n");
exit(1);
}
L->data[i]=x;
L->length++;
if(L->length>=MAXSIZE)
{
printf("错误\n");
exit(1);
}
}
//插入某个元素
SqList *Insert_SqList(SqList *L,int i,ElemType x)
{
int m;
if(i<1||i>(L->length+1))
{
printf("插入位置i不合理!\n");
exit(1);
}
if(L->length>=(MAXSIZE-1))
{
printf("顺序表已满,不能再插入!\n");
exit(1);
}
for(m=(L->length-1);m>=i-1;m--)
{
L->data[m+1]=L->data[m];
}
L->data[i-1]=x;
L->length++;
return L;
}
//删除某个元素
SqList *Delete_SqList(SqList *L,int i)
{
ElemType e;
if(i<1||(i>L->length))
{
printf("删除位置i不合理!\n");
exit(1);
}
e=L->data[i-1];
printf("删除的位置对应的值为: %d\n",e);
for(i;i<L->length;++i)
{
L->data[i-1]=L->data[i];
}
L->length-=1;
return L;
}
//按值查找
int LocateElem_Sq(SqList *L,ElemType x)
{
int i=1;
while(i<=L->length&&L->data[i-1]!=x)
{
i++;
}
if(i>L->length)
{
return -1;
}
else
{
return i;
}
}
//销毁整个顺序表
bool Destroy_SqList(SqList *L)
{
if(!L)
{
printf("失败,表为空!\n");
return 0;
}
else
{
free(L);
L->length=0;
return 1;
}
}
//顺序表的输出
void Print_SqList(SqList *L)
{
if(!L)
{
printf("无法输出内容,表L为空!\n");
}
int i;
for(i=0;i<L->length;i++)
{
printf("%3d",L->data[i]);
}
}
//主函数
int main()
{
SqList *L;
L=init_SqList();
printf("顺序表初始化完成\n");
printf("接下来是构造初始顺序表操作,请输入插入内容的总数: ");
int i,n,num;
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个数的值: ",i+1);
scanf("%d",&num);
L=Start_SqList(L,i,num);
}
printf("顺序表输入操作完成,此时顺序表的内容为:\n");
Print_SqList(L);
printf("\n接下来是插入操作,请输入要插入的位置和数值,如3,30\n");
scanf("%d,%d",&i,&num);
L=Insert_SqList(L,i,num);
printf("顺序表插入操作完成,此时顺序表的内容为:\n");
Print_SqList(L);
printf("\n接下来是删除操作,请输入要删除值的位置: ");
scanf("%d",&n);
L=Delete_SqList(L,n);
printf("此时顺序表的内容为:\n");
Print_SqList(L);
printf("接下来是按值查找操作,请输入要查找的值: ");
scanf("%d",&n);
i=LocateElem_Sq(L,n);
if(i==-1)
{
printf("输入位置有误!\n");
}
else
{
printf("该值%d的位置在%d位置\n",n,i);
}
printf("接下来是销毁操作:\n");
if(Destroy_SqList(L))
{
printf("销毁成功:\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: