实验 数据结构(顺序表的建立于操作)
[实验目的]理解数据结构的顺序存储关系,掌握基本操作算法; [实验环境] VC6.0 或VS2010/2012
[实验步骤]按要求建立C源程序,观察并分析结果。
说明:以下程序构造顺序表SeqList,并且定义了顺序表的常用操作,主函数依次调用这些函数,完成相应操作。 源程序如下:
#include \ #include \
/****以下定义常量,****/ #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0
#define MAXSIZE 20 //顺序表最大长度
/*以下定义类型的同义字*/
typedef int Status; //凡遇到Status即为int类型 typedef int ElemType; //凡遇到ElemType即为int类型
/*以下定义顺序表SeqList*/ typedef struct {
ElemType data[MAXSIZE]; //data用于存放表结点 int length; // 表长度 }SeqList;
/**顺序表初始化**/
Status InitSeqList(SeqList *seqList) // *seqListL表示指向顺序表SeqList的指针 {
seqList->length=0; //置为空表 return OK; }
/*求顺序表的长度*/
int GetSeqListLen(SeqList *seqList) {
return seqList->length; }
/*插入元素(在第n个元素之前的位置插入新元素)*/
Status Insert(SeqList *seqList,int n,ElemType e) {
int k;
//检查数组是否已满
if (seqList->length>=MAXSIZE) return ERROR;
//检查n的位置是否超出范围
if (n<1||n>seqList->length+1) return ERROR;
//若插入数据位置不在表尾 if (n<=seqList->length) {
//将要插入位置之后元素依次向后移动一位 for (k=seqList->length-1;k>=n-1;k--) {
seqList->data[k+1]=seqList->data[k]; } }
//将新元素插入到腾出的位置,并将表长加1 seqList->data[n-1]=e; seqList->length++; return OK; }
/*删除元素(删除第n个元素)*/
Status Delete(SeqList *seqList,int n,ElemType *e) {
int k;
//判断数组是否为空
if (seqList->length==0) return ERROR;
//判断n的位置是否合法
if (n<1||n>seqList->length) return ERROR;
*e=seqList->data[n-1];
//如果删除不是最后位置 if (n
//将删除位置后继元素依次前移 for (k=n;k
seqList->data[k-1]=seqList->data[k]; } }
//表长减1
seqList->length--; return OK; }
/*查找第n个元素*/
int GetDataByIndex(SeqList *seqList,int n) {
//检查位置是否超出范围
if (n<1||n>seqList->length) return ERROR; return seqList->data[n-1]; }
/*打印结果*/
void Display(SeqList *seqList) {
int i;
printf(\展示数据********\\n\ for (i=0;i
printf(\->data[i]);
}
printf(\ }
/*********以下是主程序********/
void main() {
//声明变量
SeqList seqList; //创建顺序表 int i,j,k,m,elem; //声明变量
printf(\初始化************************\\n\ i=InitSeqList(&seqList);// 调用InitSeqList函数,其中&符号表示地址 printf(\初始化后表的长度为:%d\\n\
printf(\插入五条数据******************\\n\ for (j=1;j<=5;j++) { printf(\输入第%d条数据:\ scanf(\
i=Insert(&seqList,j,m);//调用Insert函数,在表头依次插入5个数 }
Display(&seqList); //调用Display函数,显示顺序表
printf(\删除一条数据*******************\\n\ printf(\删除哪条数据?\ scanf(\
i=Delete(&seqList,j,&elem); //调用Delete函数,删除指定数据 if (i==OK) printf(\删除成功\\n\
Display(&seqList); //调用Display函数,显示顺序表
printf(\按位置查找元素*****************\\n\ printf(\查找第几条数据?\ scanf(\ k=GetDataByIndex(&seqList,j); //调用GetDataByIndex函数 printf(\第%d个元素为%d\\n\
printf(\获取表的当前长度*****************\\n\ k=GetSeqListLen(&seqList); //调用GetSeqListLen函数 printf(\当前表中还有%d个元素\\n\\n\ getchar(); }
程序运行结果:
实验提交要求:
1、 写出顺序表的插入、删除、查找第n个记录的过程。
先写出源程序,包括:常量true,false,值分别为1,0,还有几个同义字和顺序表,然后进行初始化Status initseqlist以便表格能用,用int函数求出他的长度,在指定元素前插入新元素,接着再进行删除元素和按位置查找元素操作,根据操作写出完整的主程序,得到运行结果。