#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAX_SIZE 100
typedef int ElemType;
typedef struct node
{
ElemType data[MAX_SIZE+1];
int length;
}*seqList;
//初始化一个空的顺序表
seqList initSeqList()
{
seqList l=(seqList)malloc(sizeof(struct node));
if(!l)
{
printf("动态内存分配失败!\n");
exit(0);
}
l->length=0;
printf("顺序表初始化成功!\n");
return l;
}
//添加一个元素
int elemInsert(seqList l,ElemType e)
{
if(l->length<MAX_SIZE)
{
l->data[++l->length]=e;
return 1;
}
return 0;
}
//删除一个元素
int elemDelete(seqList l,ElemType e)
{
int i,k=-1;
for(i=1; i<=l->length; i++)
{
if(l->data[i]==e)
k=i;
}
if(k==-1)
return 0;
if(k<l->length)
{
for(i=k; i<=l->length; i++)
{
l->data[i]=l->data[i+1];
}
}
l->length--;
return 1;
}
//打印顺序表
void printSeqList(seqList l)
{
int i;
printf("打印顺序表:\n");
for(i=1; i<=l->length; i++)
printf("%d ",l->data[i]);
printf("\n");
}
//返回顺序表中元素的下标
int elemLocate(seqList l,ElemType e)
{
int i;
for(i=1;i<=l->length;i++)
{
if(l->data[i]==e)
return i;
}
return 0;
}
//清空顺序表
int clearSeqList(seqList l)
{
if(l)
{
l->length=0;
return 1;
}
return 0;
}
//顺序表的长度
int listLength(seqList l)
{
if(l)
return l->length;
return 0;
}
//销毁顺序表
int destorySeqList(seqList l)
{
if(l)
{
clearSeqList(l);
free(l);
l=NULL;
return 1;
}
return 0;
}
//通过索引获取顺序表元素
int getElem(seqList l,int k)
{
int i;
for(i=1;i<=l->length;i++)
{
if(i==k)
return l->data[i];
}
return 0;
}
//判断顺序表是否为空
int isEmpty(seqList l)
{
if(l->length==0)
{
return 1;
}
return 0;
}
//求顺序表的前趋
int priorElem(seqList l,ElemType e,ElemType *prior)
{
int i,k;
if(k=elemLocate(l,e))
{
if(k>1)
{
*prior=l->data[k-1];
return 1;
}
}
return 0;
}
//求顺序表的后继
int nextElem(seqList l,ElemType e,ElemType *next)
{
int i,k;
if(k=elemLocate(l,e))
{
if(k<l->length)
{
*next=l->data[k+1];
return 1;
}
}
return 0;
}
int main()
{
seqList l=initSeqList();
if(isEmpty(l))
{
printf("顺序表l是空表!\n");
}
int n,i;
ElemType d;
printf("请输入元素个数:\n");
scanf("%d",&n);
printf("请输入%d个元素:\n",n);
for(i=1; i<=n; i++)
{
scanf("%d",&d);
elemInsert(l,d);
}
printSeqList(l);
int deleteNum;
printf("请输入要删除的元素:\n");
scanf("%d",&deleteNum);
if(elemDelete(l,deleteNum)==1)
{
printf("删除成功!");
printSeqList(l);
}
else{
printf("删除失败!");
}
int findNum;
printf("输入要查找的元素:\n");
scanf("%d",&findNum);
if(elemLocate(l,findNum))
{
printf("查找成功!\n");
}
else
{
printf("未找到!");
}
int index,elem;
printf("请输入某下标的元素:\n");
scanf("%d",&index);
if(elem=getElem(l,index))
{
printf("获取成功,元素值为%d\n",elem);
}
else
{
printf("获取失败!\n");
}
int prior,next,data;
printf("请输入表中的一个数字:\n");
scanf("%d",&data);
if(priorElem(l,data,&prior))
{
printf("%d的前趋为%d\n",data,prior);
}
else
{
printf("%d没有前趋或%d不存在",data,data);
}
if(nextElem(l,data,&next))
{
printf("%d的后继为%d\n",data,next);
}
else
{
printf("%d没有后继或%d不存在",data,data);
}
//clearSeqList(l);
if(destorySeqList(l))
{
//printSeqList(l);
printf("销毁成功!\n");
}
return 0;
}
顺序表基本操作实现(c语言)
最新推荐文章于 2022-06-01 12:45:21 发布