当前位置:文档之家› 实验一 顺序表的基本运算

实验一 顺序表的基本运算

实验一顺序表的基本运算
1、实验目的
掌握顺序表的基本操作,初始化、插入、删除以及显示等运算在顺序存储结构上的实现。

2、实验内容
(1)顺序表的初始化;
(2)顺序表插入算法的实现;
(3)顺序表删除算法的实现;
(4)显示顺序表中各个元素;
(5)顺序表清空算法的实现;
(6)顺序表判空算法的实现;
(7)求顺序表长度算法的实现;
(8)求顺序表中一个元素前驱算法的实现;
(9)求顺序表中一个元素后继算法的实现;
(10)求顺序表第i个元素算法的实现。

3、实验要求
(1)能够熟练在Visual C++6.0环境中进行程序的编辑、编译和调试;
(2)会书写类C语言的算法,并将算法转变为程序实现。

4、运行程序
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
#define LISTINCREMENT 10
typedef char ElemType;
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
int InitList_Sq(SqList &L){
L.elem = (ElemType *)malloc(MaxSize*sizeof(ElemType));
if(!L.elem) return 0;
L.length = 0;
L.listsize=MaxSize;
return 1;}
int ListInsert_Sq(SqList &L,int i,ElemType e){
if(i<1||i>L.length+1) return 0;
ElemType *p;
if(L.length>=L.listsize) {
ElemType *newbase = (ElemType *)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(! newbase) return 0;
L.elem = newbase;
L.listsize += LISTINCREMENT; }
ElemType *q=&L.elem[i-1];
for(p=&L.elem[L.length-1];p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
return 1;}
int ListDelete_Sq(SqList &L,int i,ElemType &e){
if(i<1||i>L.length) return 0;
ElemType *p=&(L.elem[i-1]);
e=*p;
ElemType *q=L.elem+L.length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
--L.length;
return 1;}
void Disp_Sq(SqList L){
if(L.length==0) printf("此顺序表为空表!\n");
for(int i=0;i<L.length;i++)
printf("%c",L.elem[i]);
printf("\n");}
void main(){
ElemType e;
SqList L;
InitList_Sq(L);
Disp_Sq(L);
ListInsert_Sq(L,1,'A');
ListInsert_Sq(L,2,'B');
ListInsert_Sq(L,1,'C');
Disp_Sq(L);
ListDelete_Sq(L,1,e);
Disp_Sq(L);
printf("删除的元素是:%c\n",e);}
5、测试数据:
(1)运行程序并给出运行结果。

(2)改变主函数,使插入的元素序列为CBA,并删除第2个位置的元素。

void main( ){
}
(3)执行下列函数
#include <stdio.h>
#include <malloc.h>
void main(){
char a[3]={'C','A','B'}; int i;
for(i=0;i<3;i++) printf("%c",a[i]);
printf("\n");
char e=a[0];
for(i=0;i<2;i++) a[i]=a[i+1];
a[2]=' ';
for(i=0;i<3;i++) printf("%c",a[i]);
printf("\n");
printf("删除的元素是:%c\n",e); }
观察运行结果,分析在数组中直接插入和删除元素与在顺序表中插入删除元素的区别。

(4)将实验内容中(5)-(10)的算法写成函数,使得主程序可以调用它们。

相关主题