借助数组来描述顺序表。除了用数组来存储线性表的元素之外,顺序表还应该有表示线性表的长度属性,所以用结构类型来定义顺序表类型。
#defineOK1
#defineERROR-1
#defineMAX_SIZE100
typedefintStatus ;
typedefintElemType ;
typedefstructsqlist
{ElemTypeElem_array[MAX_SIZE] ;
int length ;
} SqList ;
【数据结构|线性表的基本操作】1 顺序线性表初始化
Status Init_SqList( SqList *L )
{L->elem_array=( ElemType * )malloc(MAX_SIZE*sizeof( ElemType ) ) ;
if ( !L -> elem_array ) returnERROR ;
else {L->length= 0 ;
return OK ;
}
}
2 顺序线性表的插入
在线性表 L= (a1,…a i-1,ai, ai+1,…,an) 中的第i(1≦i≦n)个位置上插入一个新结点e,使其成为线性表:
L=(a1,…a i-1,e,ai,ai+1,…,an)
实现步骤
(1) 将线性表L中的第i个至第n个结点后移一个位置。
(2) 将结点e插入到结点ai-1之后。
(3) 线性表长度加1。
算法描述
Status Insert_SqList(Sqlist *L,int i ,ElemType e)
{int j ;
if( i<0||i>L->length-1)returnERROR ;
if(L->length>=MAX_SIZE)
{printf(“线性表溢出!\n”);
returnERROR ;
}
for( j=L->length–1;
j>=i-1;
--j )
L->Elem_array[j+1]=L->Elem_array[j];
/*i-1位置以后的所有结点后移*/
L->Elem_array[i-1]=e;
/*在i-1位置插入结点*/
L->length++ ;
returnOK ;
}
3 顺序线性表的删除
在线性表 L=(a1,…a i-1,ai, ai+1,…,an) 中删除结点ai(1≦i≦n),使其成为线性表:
L= (a1,…ai-1,ai+1,…,an)
实现步骤
(1) 将线性表L中的第i+1个至第n个结点依此向前移动一个位置。
(2) 线性表长度减1。
算法描述
ElemTypeDelete_SqList(Sqlist *L,int i)
{intk ;
ElemTypex ;
if(L->length==0)
{printf(“线性表L为空!\n”);
return ERROR;
}
else if ( i<1||i>L->length )
{printf(“要删除的数据元素不存在!\n”) ;
return ERROR ;
}
else{x=L->Elem_array[i-1] ;
/*保存结点的值*/
for ( k=i ;
klength ;
k++)
L->Elem_array[k-1]=L->Elem_array[k];
/*i位置以后的所有结点前移*/
L->length--;
return (x);
}
}
4 顺序线性表的查找定位删除
在线性表 L= (a1,a2,…,an) 中删除值为x的第一个结点。
实现步骤
(1) 在线性表L查找值为x的第一个数据元素。
(2) 将从找到的位置至最后一个结点依次向前移动一个位置。
(3) 线性表长度减1。
算法描述
StatusLocate_Delete_SqList(Sqlist *L,ElemType x)
/*删除线性表L中值为x的第一个结点*/
{inti=0 , k ;
while(ilength)/*查找值为x的第一个结点*/
{if(L->Elem_array[i]!=x )i++ ;
else
{for ( k=i+1;
k< L->length;
k++)
L->Elem_array[k-1]=L->Elem_array[k];
L->length--;
break ;
}
}
if(i>L->length)
{printf(“要删除的数据元素不存在!\n”) ;
return ERROR ;
}
returnOK;
}
完整程序会在下一篇博客中给出。
推荐阅读
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- 【C】题目|【C语言】题集 of ⑥
- 单片机|自学单片机好找工作吗(会单片机能找什么工作?)
- 单片机|keil把源代码生成lib的方法
- c语言|一文搞懂栈(stack)、堆(heap)、单片机裸机内存管理malloc
- c语言|C语言初期学习遇到的特殊点 【三子棋详解】【初学者福音,详细总结,复习能手】
- 笔记|C语言数据结构——二叉树的顺序存储和二叉树的遍历
- C语言学习(bit)|16.C语言进阶——深度剖析数据在内存中的存储
- 数据结构和算法|LeetCode 的正确使用方式
- 先序遍历 中序遍历 后序遍历 层序遍历