关于线性表顺序存储操作的16种算法概要Word文档格式.docx
《关于线性表顺序存储操作的16种算法概要Word文档格式.docx》由会员分享,可在线阅读,更多相关《关于线性表顺序存储操作的16种算法概要Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
*
L->
maxSize
sizeof(elemType));
if(!
p){
分配失败则退出运行
printf("
存储空间分配失败!
"
);
exit
(1);
}
list
p;
使list指向新线性表空间
把线性表空间大小修改为新的长度
1.初始化线性表L,即进行动态存储空间分配并置L为一个空表
initList(struct
*L,
ms)
{
检查ms是否有效,若无效的则退出运行
if(ms
0){
MaxSize非法!
执行此函数中止程序运行,此函数在stdlib.h中有定义
ms;
设置线性表空间大小为ms
size
0;
malloc(ms
list){
空间分配失败!
return;
2.清除线性表L中的所有元素,释放存储空间,使之成为一个空表
clearList(struct
if(L->
!
NULL){
free(L->
list);
3.返回线性表L当前的长度,若L为空则返回0
sizeList(struct
return
4.判断线性表L是否为空,若为空则返回1,
否则返回0
emptyList(struct
==0){
1;
else{
5.返回线性表L中第pos个元素的值,若pos超出范围,则停止程序运行
getElem(struct
pos)
if(pos
1
||
pos
>
size){
若pos越界则退出运行
元素序号越界!
list[pos
-
1];
返回线性表中序号为pos值的元素值
6.顺序扫描(即遍历)输出线性表L中的每个元素
traverseList(struct
i;
for(i
i
i++){
%d
"
L
->
list[i]);
7.从线性表L中查找值与x相等的元素,若查找成功则返回其位置,否则返回-1
findList(struct
x)
list[i]
==
x){
-1;
8.把线性表L中第pos个元素的值修改为x的值,若修改成功返回1,否则返回0
updatePosList(struct
pos,
若pos越界则修改失败
1]
x;
9.向线性表L的表头插入元素x
inserFirstList(struct
maxSize){
againMalloc(L);
i--){
list[i
+
list[i];
list[0]
++;
10.向线性表L的表尾插入元素x
insertLastList(struct
maxSize){
重新分配更大的存储空间
list[L->
size]
把x插入到表尾
size++;
线性表的长度增加1
11.向线性表L中第pos个元素位置插入元素x,若插入成功返回1,否则返回0
insertPosList(struct
1){
若pos越界则插入失败
12.向有序线性表L中插入元素x, 使得插入后仍然有序*/
insertOrderList(struct
i,
j;
若数组空间用完则重新分配更大的存储空间
顺序查找出x的插入位置
if(x
list[i]){
break;
从表尾到下标i元素依次后移一个位置,
把i的位置空出来
for(j
j
j--)
list[j+1]
list[j];
把x值赋给下标为i的元素
*/
线性表长度增加1
13.从线性表L中删除表头元素并返回它,若删除失败则停止程序运行
deleteFirstList(struct
temp;
if(L
线性表为空,不能进行删除操作!
temp
list[0];
i++)
list[i-1]
size--;
14.从线性表L中删除表尾元素并返回它,若删除失败则停止程序运行
deleteLastList(struct
size];
返回原来表尾元素的值
15.从线性表L中删除第pos个元素并返回它,若删除失败则停止程序运行
deletePosList(struct
pos越界则删除失败
pos值越界,不能进行删除操作!
list[pos-1];
pos;
16.从线性表L中删除值为x的第一个元素,若成功返回1,失败返回0
deleteValueList(struct
从线性表中顺序查找出值为x的第一个元素
x){
若查找失败,表明不存在值为x的元素,返回0
if(i
size){
删除值为x的元素L->
j++){
list[j-1]
main()
a[10]
{2,
4,
6,
8,
10,
12,
14,
16,
18,
20};
L;
initList(&
L,
5);
10;
insertLastList(&
a[i]);
insertPosList(&
11,
48);
1,
64);
%d"
getElem(&
1));
traverseList(&
L);
findList(&
10));
updatePosList(&
3,
20);
3));
deleteFirstList(&
deleteLastList(&
deletePosList(&
;
7);
sizeList(&
L));
emptyList(&
clearList(&
#define
NN
12
MM
20
以下是关于线性表链接存储(单链表)操作的16种算法
sNode{
定义单链表结点类型
data;
sNode
*next;
1.初始化线性表,即置单链表的表头指针为空
sNode*
*hl)
*hl
NULL;
2.清除线性表L中的所有元素,即释放单链表L中所有的结点,使之成为一个空表
cp和np分别作为指向两个相邻结点的指针
*cp,
*np;
cp
*hl;
遍历单链表,依次释放每个结点
while(cp
np
cp->
next;
保存下一个结点的指针
free(cp);
np;
置单链表的表头指针为空
3.返回单链表的长度
count
用于统计结点的个数
while(hl
count++;
hl
hl->
count;
4.检查单链表是否为空,若为空则返回1,否则返回0
if(hl
}else{
5.返回单链表中第pos个结点中的元素,若pos超出范围,则停止程序运行
*hl,
统计已遍历的结点个数
1){
pos值非法,退出运行!
i++;
pos){
6.遍历一个单链表
%5d"
data);
7.从单链表中查找具有给定值x的第一个元素,若查找成功则返回该结点data域的存储地址,否则返回NULL
elemType*
if(hl->
data
&
8.把单链表中第pos个结点的值修改为x的值,若修改成功返回1,否则返回0
hl;
while(p
NULL){
查找第pos个结点
i){
p
p->
9.向单链表的表头插入一个元素
insertFirstList(struct
*newP;
newP
malloc(sizeof(struct
sNode));
if(newP
内存分配失败,退出运行!
newP->
把x的值赋给新结点的data域
把新结点作为新的表头结点插入
next
newP;
10.向单链表的末尾添加一个元素
内在分配失败,退出运行!
把x的值赋给新结点的data域,把空值赋给新结点的next域
若原表为空,则作为表头结点插入
if(*hl
查找到表尾结点并完成插入
while(p->
11.向单链表中第pos个结点位置插入元素为x的结点,若插入成功返回1,否则返回0
insetPosList(struct
*cp
*