大家好,今天跟大家分享一下 线性表用顺序表示实现的几种功能:
1.InitList_Sq()初始化线性表
2.LocateElem()查找
3.InsertElem()插入
4.DeleteElem()删除
注:Status 和 ElemType 是用typedef函数定义的 int型变量别名
1.InitList_Sq()
此段函数作用:初始化线性表,并使用动态内存分配函数 malloc 为线性表分配空间
Status InitList_Sq(SqList *L){
L->elem = ( ElemType*)malloc(sizeof(ElemType)*MAXSIZE);
if( !L->elem )
return OVERFLOW;
L->length = 0;
return OK;
}
2.LocateElem()
此段函数作用:查找元素并返回该元素的位置
Status LocateElem(SqList *L, ElemType e){
int i;
for( i = 0; i <= L->length; i++)
{
if( L->elem[i] == e )
return i+1;
}
return FALSE;
}
3.InsertElem()
此段函数作用:在线性表中在指定位置插入元素
Status InsertElem(SqList *L, ElemType e, ElemType k){
if( k < 1 || k - 1 > L->length)
return ERROR;
if( L->length == MAXSIZE)
return OVERFLOW;
int i;
for( i = L->length; i >= k - 1; i-- )
L->elem[i+1] = L->elem[i];
L->elem[k-1] = e;
L->length++;
return OK;
}
4.DeleteElem()
此段函数作用:在线性表中按位删除并返回删除值
Status DeleteElem(SqList *L, int k){
ElemType e;
if( k < 1 || k > L->length)
return OVERFLOW;
e = L->elem[k-1];
printf("删除的元素为:%d\n",e);
int i;
for( i = k-1; i <= L->length; i++)
L->elem[i] = L->elem[i+1];
L->length--;
return e;
}
完整代码
//*********************************
//***************************
// ***线性表 ------顺序表示***
//***************************
//*********************************
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAXSIZE 100
typedef int ElemType ;
typedef int Status ;
typedef struct{
ElemType *elem;
int length;
}SqList;
// 初始线性表
Status InitList_Sq(SqList *L){
L->elem = ( ElemType*)malloc(sizeof(ElemType)*MAXSIZE);
if( !L->elem )
return OVERFLOW;
L->length = 0;
return OK;
}
// 遍历线性表
Status TraversalList_Sq(SqList *L, ElemType k){
int i,e;
for( i = 0; i < k; i++)
{
printf("请输入第%d个元素:\n", i+1);
scanf("%d",&e);
L->elem[i] = e;
L->length++;
}
}
// 查找&定位
Status LocateElem(SqList *L, ElemType e){
int i;
for( i = 0; i <= L->length; i++)
{
if( L->elem[i] == e )
return i+1;
}
return FALSE;
}
// 插入
Status InsertElem(SqList *L, ElemType e, ElemType k){
if( k < 1 || k - 1 > L->length)
return ERROR;
if( L->length == MAXSIZE)
return OVERFLOW;
int i;
for( i = L->length; i >= k - 1; i-- )
L->elem[i+1] = L->elem[i];
L->elem[k-1] = e;
L->length++;
return OK;
}
//删除 注:按位删除并返回删除值
Status DeleteElem(SqList *L, int k){
ElemType e;
if( k < 1 || k > L->length)
return OVERFLOW;
e = L->elem[k-1];
printf("删除的元素为:%d\n",e);
int i;
for( i = k-1; i <= L->length; i++)
L->elem[i] = L->elem[i+1];
L->length--;
return e;
}
//输出
Status PrintList_Sq(SqList *L){
int i;
for(i = 0; i < L->length; i++)
{
printf("第%d个元素为:%d\n", i+1,L->elem[i] );
}
}
Status main(void){
SqList L;
InitList_Sq(&L);
ElemType k,n,m,v,o,p;
printf("请输入要输入的元素个数:");
scanf("%d",&o);
TraversalList_Sq(&L,o);
printf("请输入要查找的元素:");
scanf("%d",&m);
k = LocateElem(&L,m);
printf("该元素位置为:%d\n",k);
printf("请输入要插入的元素以及插入的位置:\n");
scanf("%d %d",&v,&n);
InsertElem(&L,v,n);
PrintList_Sq(&L);
printf("请输入要删除元素的位置:");
scanf("%d",&p);
DeleteElem(&L,p);
PrintList_Sq(&L);
}
测试
总结
1.如果功能函数在实现时,会修改线性表中的数据,那么在形参中要用指针类型结构变量
2.define 和 typedef 都可以进行宏变量定义,但是在定义常数时多数用define ,定义变量时用typedef