前言
本文基于严蔚敏老师的《数据结构(C语言版)》(清华大学出版社)一书,将原书中使用C++编写的顺序表基本操作进行了C语言版本的重写,在CodeBlocks的C语言运行环境下测试无错误。
预定义常量和类型、结构体定义、函数声明
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
//预定义常量
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
//预定义类型
typedef int Status;
typedef int ElemType;
/*---线性表的动态分配顺序存储结构定义---*/
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
typedef struct
{
ElemType *elem; //存储空间基地址
int length; //当前长度
int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList;
/*全局变量定义*/
ElemType *p,*q;
//函数声明
Status InitList_Sq(SqList** L); //构造一个空的线性表L
Status DestroyList_Sq(SqList** L); //销毁线性表L
Status ClearList_Sq(SqList** L); //将线性表L重置为空表
Status ListEmpty_Sq(SqList L); //判定L是否为空表,是返回TRUE,否则返回FALSE
Status ListLength_Sq(SqList L); //求L的长度,返回L中数据元素个数
Status GetElem_Sq(SqList L, int i, ElemType *e); //用e返回L中第i个数据元素的值
Status LocateElem_Sq(SqList L, ElemType e, Status (*compare)(ElemType x, ElemType y)); //在顺序表L中查找第1个与e满足关系compare()的数据元素的位序
//3个compare函数
Status greater(ElemType x, ElemType y);
Status equal(ElemType x, ElemType y);
Status less(ElemType x, ElemType y);
Status PriorElem_Sq(SqList L, ElemType cur_e, ElemType *pre_e); //寻找cur_e的直接前驱
Status NextElem_Sq(SqList L, ElemType cur_e, ElemType *next_e); //寻找cur_e的直接后继
Status ListInsert_Sq(SqList** L, int i, ElemType e); //在顺序表中第i个位置之前插入新的数据元素e
Status ListDelete_Sq(SqList** L, int i, ElemType *e); //删除顺序表的第i个数据元素,并用e返回其值
Status ListTraverse_Sq(SqList** L, Status (*visit)(ElemType e)); //依次对L的每个数据元素调用函数visit(),一旦vixit()失败,则操作失败
//visit函数
Status Print(ElemType e);
测试主函数
int main()
{
int i,j=10,k=18;
ElemType e,pre_e,next_e;
SqList Sq; //创建结构体变量Sq
SqList *L = &Sq; //创建结构体指针L
if(InitList_Sq(&L))
printf("顺序表构造成功!\n");
printf("该顺序表的长度为%d\n",ListLength_Sq(Sq));
if(ListEmpty_Sq(Sq))
printf("······\n该顺序表为空表!\n");
else
printf("······\n该顺序表不是空表!\n");
for(i=0;i<L->listsize;i++)
{
L->elem[i] = i+1;
L->length++;
}
printf("赋值成功!\n");
if(ListEmpty_Sq(Sq))
printf("······\n该顺序表为空表!\n");
else
printf("······\n该顺序表不是空表!\n");
printf("该顺序表的长度为%d\n",ListLength_Sq(Sq));
GetElem_Sq(Sq,j,&e);
printf("顺序表中第%d个数据元素的值为%d\n",j,e);
printf("第一个大于e的元素的位序为%d\n",LocateElem_Sq(Sq,e,greater));
printf("第一个等于e的元素的位序为%d\n",LocateElem_Sq(Sq,e,equal));
printf("第一个小于e的元素的位序为%d\n",LocateElem_Sq(Sq,e,less));
if(ClearList_Sq(&L))
printf("顺序表重置成功!\n");
printf("该顺序表的长度为%d\n",ListLength_Sq(Sq));
if(ListEmpty_Sq(Sq))
printf("······\n该顺序表为空表!\n");
else
printf("······\n该顺序表不是空表!\n");
for(i=0;i<L->listsize;i++)
{
L->elem[i] = i+1;
L->length++;
}
printf("赋值成功!\n");
if(ListEmpty_Sq(Sq))
printf("······\n该顺序表为空表!\n");
else
printf("······\n该顺序表不是空表!\n");
printf("该顺序表的长度为%d\n",ListLength_Sq(Sq));
PriorElem_Sq(Sq,k,&pre_e);
printf("%d的直接前驱为%d\n",k,pre_e);
NextElem_Sq(Sq,k,&next_e);
printf("%d的直接后继为%d\n",k,next_e);
printf("在顺序表中第%d个位置之前插入新的数据元素%d\n",k,e);
ListInsert_Sq(&L,k,e);
printf("修改后的顺序表为:\n");
for(i=0;i<L->length;i++)
{
printf("%d\t",L->elem[i]);
}
printf("\n删除顺序表的第%d个数据元素\n",k);
ListDelete_Sq(&L,k,&e);
printf("被删除的元素为%d\n",e);
printf("修改后的顺序表为:\n");
for(i=0;i<L->length;i++)
{
printf("%d\t",L->elem[i]);
}
printf("\n依次对顺序表的每个数据元素调用函数Print(),做输出操作:\n");
ListTraverse_Sq(&L,Print);
printf("\n操作完成,对顺序表进行销毁。\n");
if(DestroyList_Sq(&L))
printf("顺序表销毁成功!\n");
return 0;
}
各基本操作的功能实现
//函数功能:构造一个空的线性表L
//函数参数:结构体指针L
//返回值:成功返回OK,失败返回OVERFLOW
Status InitList_Sq(SqList** L)
{
(*L)->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if(!(*L)->elem) exit(OVERFLOW); //存储分配失败
(*L)->length = 0; //空表长度为0
(*L)->listsize = LIST_INIT_SIZE; //初始存储容量
return OK;
}
//函数功能:销毁线性表L
//函数参数:二级结构体指针L
//返回值:成功返回OK,失败返回ERROR
Status DestroyList_Sq(SqList** L)
{
free((*L)->elem);
(*L)->elem = NULL;
(*L)->length = 0;
(*L)->listsize = 0;
if(!(*L)->elem)
return OK;
else
return ERROR;
}
//函数功能:将线性表L重置为空表
//函数参数:二级结构体指针L
//返回值:成功返回OK
Status ClearList_Sq(SqList** L)
{
(*L)->length = 0;
return OK;
}
//函数功能:判定L是否为空表
//函数参数:顺序表L
//返回值:是返回TRUE,否返回FALSE
Status ListEmpty_Sq(SqList L)
{
if(L.length == 0) return TRUE;
else return FALSE;
}
//函数功能:求L的长度
//函数参数:顺序表L
//返回值:返回L中数据元素个数
Status ListLength_Sq(SqList L)
{
return L.length;
}
//函数功能:用e返回L中第i个数据元素的值
//函数参数:顺序表L,整型变量i,ElemType类型指针e
//返回值:L中第i个元素的值
Status GetElem_Sq(SqList L, int i, ElemType *e)
{
*e = L.elem[i-1];
return OK;
}
//函数功能:在顺序表L中查找第1个与e满足关系compare()的数据元素的位序
//函数参数:结构体变量L,ElemType类型变量e,函数指针compare
//返回值:成功返回相应位序,失败返回0
Status LocateElem_Sq(SqList L, ElemType e, Status (*compare)(ElemType x, ElemType y))
{
int i=1; //i的初值为第一个元素的位序
p = L.elem; //p的初值为第一个元素的存储位置
while(i<=L.length && !(*compare)(*p++,e)) ++i;
if(i<= L.length) return i;
else return 0;
}
Status greater(ElemType x, ElemType y) //寻找第一个大于e的元素
{
if(x > y) return TRUE;
else return FALSE;
}
Status equal(ElemType x, ElemType y) //寻找第一个等于e的元素
{
if(x == y) return TRUE;
else return FALSE;
}
Status less(ElemType x, ElemType y) //寻找第一个小于e的元素
{
if(x < y) return TRUE;
else return FALSE;
}
//函数功能:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的直接前驱,否则操作失败,pre_e无定义
//函数参数:结构体变量L,ElemType类型变量cur_e,ElemType类型指针pre_e
//返回值:成功返回OK,失败返回ERROR
Status PriorElem_Sq(SqList L, ElemType cur_e, ElemType *pre_e)
{
int i;
for(i = 0;i < L.length;i++)
{
if(L.elem[i] == cur_e)
{
break;
}
}
if (i == 0 || i == L.length)
{
if(i == 0)
{
printf("该元素没有前驱捏\n");
}
else
{
printf("该元素不是L的数据元素捏\n");
}
return ERROR;
}
*pre_e = L.elem[i - 1];
return OK;
}
//函数功能:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的直接后继,否则操作失败,next_e无定义
//函数参数:结构体变量L,ElemType类型变量cur_e,ElemType类型指针next_e
//返回值:成功返回OK,失败返回ERROR
Status NextElem_Sq(SqList L, ElemType cur_e, ElemType *next_e)
{
int i;
for(i = 0;i < L.length;i++)
{
if(L.elem[i] == cur_e)
{
break;
}
}
if (i == L.length-1 || i == L.length)
{
if(i == L.length-1)
{
printf("该元素没有直接后驱捏\n");
}
else
{
printf("该元素不是L的数据元素捏\n");
}
return ERROR;
}
*next_e = L.elem[i + 1];
return OK;
}
//函数功能:在顺序表中第i个位置之前插入新的数据元素e
//函数参数:二级结构体指针L,整型变量i,ElemType变量e
//返回值:成功返回OK,失败返回ERROR或OVERFLOW
Status ListInsert_Sq(SqList** L, int i, ElemType e)
{
if(i<1 || i>(*L)->length+1) return ERROR; //i值不合法,i的合法值为1<= i <=ListLength_Sq(L)+1
if((*L)->length >= (*L)->listsize) //当前存储空间已满,增加分配
{
(*L)->elem = (ElemType *)realloc((*L)->elem, ((*L)->listsize + LISTINCREMENT) * sizeof(ElemType)); //新基地址
if(!(*L)->elem) exit(OVERFLOW); //存储分配失败
(*L)->listsize += LISTINCREMENT; //增加存储容量
}
q = &((*L)->elem[i-1]); //用指针q记录插入位置的地址
for(p = &((*L)->elem[(*L)->length-1]);p>=q;--p) *(p+1) = *p; //插入位置及之后的元素右移
*q = e; //插入e
++(*L)->length; //线性表长度增加1
return OK;
}
//函数功能:删除顺序表的第i个数据元素,并用e返回其值
//函数参数:二级结构体指针L,整型变量i,ElemType类型变量e
//返回值:成功返回OK,失败返回ERROR
Status ListDelete_Sq(SqList** L, int i, ElemType *e)
{
if(i<1 || i>(*L)->length+1) return ERROR; //i值不合法
p = &((*L)->elem[i-1]); //p为被删除元素的位置
*e = *p; //被删除元素的值赋给e
q = (*L)->elem+(*L)->length-1; //表尾元素的位置
for(++p;p<=q;++p) *(p-1) = *p; //被删除元素之后的元素左移
--(*L)->length; //表长减1
return OK;
}
//函数功能:依次对L的每个数据元素调用函数visit(),一旦vixit()失败,则操作失败
//函数参数:二级结构体指针L,Status类型函数指针visit
//返回值:成功返回OK
Status ListTraverse_Sq(SqList** L, Status (*visit)(ElemType e))
{
int i;
for(i=0;i<(*L)->length;i++)
{
(*visit)((*L)->elem[i]);
}
return OK;
}
Status Print(ElemType e)
{
printf("%d\t",e);
return OK;
}
完整代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
//预定义常量
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
//预定义类型
typedef int Status;
typedef int ElemType;
/*---线性表的动态分配顺序存储结构定义---*/
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
typedef struct
{
ElemType *elem; //存储空间基地址
int length; //当前长度
int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList;
/*全局变量定义*/
ElemType *p,*q;
//函数声明
Status InitList_Sq(SqList** L); //构造一个空的线性表L
Status DestroyList_Sq(SqList** L); //销毁线性表L
Status ClearList_Sq(SqList** L); //将线性表L重置为空表
Status ListEmpty_Sq(SqList L); //判定L是否为空表,是返回TRUE,否则返回FALSE
Status ListLength_Sq(SqList L); //求L的长度,返回L中数据元素个数
Status GetElem_Sq(SqList L, int i, ElemType *e); //用e返回L中第i个数据元素的值
Status LocateElem_Sq(SqList L, ElemType e, Status (*compare)(ElemType x, ElemType y)); //在顺序表L中查找第1个与e满足关系compare()的数据元素的位序
//3个compare函数
Status greater(ElemType x, ElemType y);
Status equal(ElemType x, ElemType y);
Status less(ElemType x, ElemType y);
Status PriorElem_Sq(SqList L, ElemType cur_e, ElemType *pre_e); //寻找cur_e的直接前驱
Status NextElem_Sq(SqList L, ElemType cur_e, ElemType *next_e); //寻找cur_e的直接后继
Status ListInsert_Sq(SqList** L, int i, ElemType e); //在顺序表中第i个位置之前插入新的数据元素e
Status ListDelete_Sq(SqList** L, int i, ElemType *e); //删除顺序表的第i个数据元素,并用e返回其值
Status ListTraverse_Sq(SqList** L, Status (*visit)(ElemType e)); //依次对L的每个数据元素调用函数visit(),一旦vixit()失败,则操作失败
//visit函数
Status Print(ElemType e);
int main()
{
int i,j=10,k=18;
ElemType e,pre_e,next_e;
SqList Sq; //创建结构体变量Sq
SqList *L = &Sq; //创建结构体指针L
if(InitList_Sq(&L))
printf("顺序表构造成功!\n");
printf("该顺序表的长度为%d\n",ListLength_Sq(Sq));
if(ListEmpty_Sq(Sq))
printf("······\n该顺序表为空表!\n");
else
printf("······\n该顺序表不是空表!\n");
for(i=0;i<L->listsize;i++)
{
L->elem[i] = i+1;
L->length++;
}
printf("赋值成功!\n");
if(ListEmpty_Sq(Sq))
printf("······\n该顺序表为空表!\n");
else
printf("······\n该顺序表不是空表!\n");
printf("该顺序表的长度为%d\n",ListLength_Sq(Sq));
GetElem_Sq(Sq,j,&e);
printf("顺序表中第%d个数据元素的值为%d\n",j,e);
printf("第一个大于e的元素的位序为%d\n",LocateElem_Sq(Sq,e,greater));
printf("第一个等于e的元素的位序为%d\n",LocateElem_Sq(Sq,e,equal));
printf("第一个小于e的元素的位序为%d\n",LocateElem_Sq(Sq,e,less));
if(ClearList_Sq(&L))
printf("顺序表重置成功!\n");
printf("该顺序表的长度为%d\n",ListLength_Sq(Sq));
if(ListEmpty_Sq(Sq))
printf("······\n该顺序表为空表!\n");
else
printf("······\n该顺序表不是空表!\n");
for(i=0;i<L->listsize;i++)
{
L->elem[i] = i+1;
L->length++;
}
printf("赋值成功!\n");
if(ListEmpty_Sq(Sq))
printf("······\n该顺序表为空表!\n");
else
printf("······\n该顺序表不是空表!\n");
printf("该顺序表的长度为%d\n",ListLength_Sq(Sq));
PriorElem_Sq(Sq,k,&pre_e);
printf("%d的直接前驱为%d\n",k,pre_e);
NextElem_Sq(Sq,k,&next_e);
printf("%d的直接后继为%d\n",k,next_e);
printf("在顺序表中第%d个位置之前插入新的数据元素%d\n",k,e);
ListInsert_Sq(&L,k,e);
printf("修改后的顺序表为:\n");
for(i=0;i<L->length;i++)
{
printf("%d\t",L->elem[i]);
}
printf("\n删除顺序表的第%d个数据元素\n",k);
ListDelete_Sq(&L,k,&e);
printf("被删除的元素为%d\n",e);
printf("修改后的顺序表为:\n");
for(i=0;i<L->length;i++)
{
printf("%d\t",L->elem[i]);
}
printf("\n依次对顺序表的每个数据元素调用函数Print(),做输出操作:\n");
ListTraverse_Sq(&L,Print);
printf("\n操作完成,对顺序表进行销毁。\n");
if(DestroyList_Sq(&L))
printf("顺序表销毁成功!\n");
return 0;
}
//函数功能:构造一个空的线性表L
//函数参数:结构体指针L
//返回值:成功返回OK,失败返回OVERFLOW
Status InitList_Sq(SqList** L)
{
(*L)->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if(!(*L)->elem) exit(OVERFLOW); //存储分配失败
(*L)->length = 0; //空表长度为0
(*L)->listsize = LIST_INIT_SIZE; //初始存储容量
return OK;
}
//函数功能:销毁线性表L
//函数参数:二级结构体指针L
//返回值:成功返回OK,失败返回ERROR
Status DestroyList_Sq(SqList** L)
{
free((*L)->elem);
(*L)->elem = NULL;
(*L)->length = 0;
(*L)->listsize = 0;
if(!(*L)->elem)
return OK;
else
return ERROR;
}
//函数功能:将线性表L重置为空表
//函数参数:二级结构体指针L
//返回值:成功返回OK
Status ClearList_Sq(SqList** L)
{
(*L)->length = 0;
return OK;
}
//函数功能:判定L是否为空表
//函数参数:顺序表L
//返回值:是返回TRUE,否返回FALSE
Status ListEmpty_Sq(SqList L)
{
if(L.length == 0) return TRUE;
else return FALSE;
}
//函数功能:求L的长度
//函数参数:顺序表L
//返回值:返回L中数据元素个数
Status ListLength_Sq(SqList L)
{
return L.length;
}
//函数功能:用e返回L中第i个数据元素的值
//函数参数:顺序表L,整型变量i,ElemType类型指针e
//返回值:L中第i个元素的值
Status GetElem_Sq(SqList L, int i, ElemType *e)
{
*e = L.elem[i-1];
return OK;
}
//函数功能:在顺序表L中查找第1个与e满足关系compare()的数据元素的位序
//函数参数:结构体变量L,ElemType类型变量e,函数指针compare
//返回值:成功返回相应位序,失败返回0
Status LocateElem_Sq(SqList L, ElemType e, Status (*compare)(ElemType x, ElemType y))
{
int i=1; //i的初值为第一个元素的位序
p = L.elem; //p的初值为第一个元素的存储位置
while(i<=L.length && !(*compare)(*p++,e)) ++i;
if(i<= L.length) return i;
else return 0;
}
Status greater(ElemType x, ElemType y) //寻找第一个大于e的元素
{
if(x > y) return TRUE;
else return FALSE;
}
Status equal(ElemType x, ElemType y) //寻找第一个等于e的元素
{
if(x == y) return TRUE;
else return FALSE;
}
Status less(ElemType x, ElemType y) //寻找第一个小于e的元素
{
if(x < y) return TRUE;
else return FALSE;
}
//函数功能:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的直接前驱,否则操作失败,pre_e无定义
//函数参数:结构体变量L,ElemType类型变量cur_e,ElemType类型指针pre_e
//返回值:成功返回OK,失败返回ERROR
Status PriorElem_Sq(SqList L, ElemType cur_e, ElemType *pre_e)
{
int i;
for(i = 0;i < L.length;i++)
{
if(L.elem[i] == cur_e)
{
break;
}
}
if (i == 0 || i == L.length)
{
if(i == 0)
{
printf("该元素没有前驱捏\n");
}
else
{
printf("该元素不是L的数据元素捏\n");
}
return ERROR;
}
*pre_e = L.elem[i - 1];
return OK;
}
//函数功能:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的直接后继,否则操作失败,next_e无定义
//函数参数:结构体变量L,ElemType类型变量cur_e,ElemType类型指针next_e
//返回值:成功返回OK,失败返回ERROR
Status NextElem_Sq(SqList L, ElemType cur_e, ElemType *next_e)
{
int i;
for(i = 0;i < L.length;i++)
{
if(L.elem[i] == cur_e)
{
break;
}
}
if (i == L.length-1 || i == L.length)
{
if(i == L.length-1)
{
printf("该元素没有直接后驱捏\n");
}
else
{
printf("该元素不是L的数据元素捏\n");
}
return ERROR;
}
*next_e = L.elem[i + 1];
return OK;
}
//函数功能:在顺序表中第i个位置之前插入新的数据元素e
//函数参数:二级结构体指针L,整型变量i,ElemType变量e
//返回值:成功返回OK,失败返回ERROR或OVERFLOW
Status ListInsert_Sq(SqList** L, int i, ElemType e)
{
if(i<1 || i>(*L)->length+1) return ERROR; //i值不合法,i的合法值为1<= i <=ListLength_Sq(L)+1
if((*L)->length >= (*L)->listsize) //当前存储空间已满,增加分配
{
(*L)->elem = (ElemType *)realloc((*L)->elem, ((*L)->listsize + LISTINCREMENT) * sizeof(ElemType)); //新基地址
if(!(*L)->elem) exit(OVERFLOW); //存储分配失败
(*L)->listsize += LISTINCREMENT; //增加存储容量
}
q = &((*L)->elem[i-1]); //用指针q记录插入位置的地址
for(p = &((*L)->elem[(*L)->length-1]);p>=q;--p) *(p+1) = *p; //插入位置及之后的元素右移
*q = e; //插入e
++(*L)->length; //线性表长度增加1
return OK;
}
//函数功能:删除顺序表的第i个数据元素,并用e返回其值
//函数参数:二级结构体指针L,整型变量i,ElemType类型变量e
//返回值:成功返回OK,失败返回ERROR
Status ListDelete_Sq(SqList** L, int i, ElemType *e)
{
if(i<1 || i>(*L)->length+1) return ERROR; //i值不合法
p = &((*L)->elem[i-1]); //p为被删除元素的位置
*e = *p; //被删除元素的值赋给e
q = (*L)->elem+(*L)->length-1; //表尾元素的位置
for(++p;p<=q;++p) *(p-1) = *p; //被删除元素之后的元素左移
--(*L)->length; //表长减1
return OK;
}
//函数功能:依次对L的每个数据元素调用函数visit(),一旦vixit()失败,则操作失败
//函数参数:二级结构体指针L,Status类型函数指针visit
//返回值:成功返回OK
Status ListTraverse_Sq(SqList** L, Status (*visit)(ElemType e))
{
int i;
for(i=0;i<(*L)->length;i++)
{
(*visit)((*L)->elem[i]);
}
return OK;
}
Status Print(ElemType e)
{
printf("%d\t",e);
return OK;
}
测试结果
顺序表构造成功!
该顺序表的长度为0
······
该顺序表为空表!
赋值成功!
······
该顺序表不是空表!
该顺序表的长度为100
顺序表中第10个数据元素的值为10
第一个大于e的元素的位序为11
第一个等于e的元素的位序为10
第一个小于e的元素的位序为1
顺序表重置成功!
该顺序表的长度为0
······
该顺序表为空表!
赋值成功!
······
该顺序表不是空表!
该顺序表的长度为100
18的直接前驱为17
18的直接后继为19
在顺序表中第18个位置之前插入新的数据元素10
修改后的顺序表为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16 17 10 18 19 20 21 22 23 24 25 26 27 28
29 30 31 32 33 34 35 36 37 38 39 40 41 42
43 44 45 46 47 48 49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80 81 82 83 84
85 86 87 88 89 90 91 92 93 94 95 96 97 98
99 100
删除顺序表的第18个数据元素
被删除的元素为10
修改后的顺序表为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39 40 41 42 43
44 45 46 47 48 49 50 51 52 53 54 55 56 57
58 59 60 61 62 63 64 65 66 67 68 69 70 71
72 73 74 75 76 77 78 79 80 81 82 83 84 85
86 87 88 89 90 91 92 93 94 95 96 97 98 99
100
依次对顺序表的每个数据元素调用函数Print(),做输出操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39 40 41 42 43
44 45 46 47 48 49 50 51 52 53 54 55 56 57
58 59 60 61 62 63 64 65 66 67 68 69 70 71
72 73 74 75 76 77 78 79 80 81 82 83 84 85
86 87 88 89 90 91 92 93 94 95 96 97 98 99
100
操作完成,对顺序表进行销毁。
顺序表销毁成功!