文档库 最新最全的文档下载
当前位置:文档库 › 数据结构C语言版实验一 顺序表的基本运算

数据结构C语言版实验一 顺序表的基本运算

实验一 顺序表的基本运算
1、实验目的
掌握顺序表的基本操作,初始化、插入、删除以及显示等运算在顺序存储结构上的实现。
2、实验内容
(1)顺序表的初始化;
(2)顺序表插入算法的实现;
(3)顺序表删除算法的实现;
(4)显示顺序表中各个元素;
(5)顺序表清空算法的实现;
(6)顺序表判空算法的实现;
(7)求顺序表长度算法的实现;
(8)求顺序表中一个元素前驱算法的实现;
(9)求顺序表中一个元素后继算法的实现;
(10)求顺序表第i个元素算法的实现。


可运行程序:
#include
#include
#include
#include
#define MaxSize 100
#define LISTINCREMENT 10
typedef char ElemType;
//(1)顺序表的初始化
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;}
//(2)顺序表插入算法的实现;
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;}
//(3)顺序表删除算法的实现;
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;}
//(4)显示顺序表中各个元素;
void Disp_Sq(SqList L){
if(L.length==0) printf("The list is empyt\n");
for(int i=0;iprintf("%c",L.elem[i]);
printf("\n");}
//(8)求顺序表中一个元素前驱算法的实现;
int PriorElem_Sq(SqList L,ElemType cur_e,ElemType &pre_e){
int i=2;
ElemType *p=L.elem+1;
while(i<=L.length&&*p!=cur_e)
{
p++;
i++;
}
if(i>L.length)
return 0;
else
{
pre_e=*--p;
return 1;
}
}
//(9)求顺序表中一个元素后继算法的实现;
int NextElem_Sq(SqList L,ElemType cur_e,ElemType &next_e){
int i=1;
ElemType *p=L.elem;
while(i{
i++;
p++;
}
if(i==L.length)
return 0;
else
{
next_e=*++p;
return 1;
}
}
//(10)求顺序表第i个元素算法的实现。
int GetElem_Sq(SqList L,int i,ElemType &e){
if(i<1||i>L.length)
return 0;
e=*(L.elem+i-1);
return 1;
}
//(5)顺序表清空算法的实现;
void Clearlist_Sq(SqList &L){
L.leng

th=0;}
//(6)顺序表判空算法的实现;
int ListEmpty_Sq(SqList L){
if(L.length==0)printf("The list is empyt\n");
return 0;
return 1;}
//(7)求顺序表长度算法的实现;
void ListLength_Sq(SqList L) {
int Len=L.length;
printf("Len=%d\n",Len);}

void main(){
ElemType e,cur_e,pre_e,next_e;
int i,m,n,k;
SqList L;
InitList_Sq(L);
Disp_Sq(L);
ListInsert_Sq(L,1,'A');
ListInsert_Sq(L,1,'B');
ListInsert_Sq(L,1,'C');//改变主函数,使插入的元素序列为CBA
Disp_Sq(L);
printf("请输入一个元素求其前驱后继:");
scanf("%c",&cur_e);
i=PriorElem_Sq(L,cur_e,pre_e);
if(i==0)
printf("元素无前驱元素\n");
else
printf("元素的前驱元素为:%c\n",pre_e);
m=NextElem_Sq(L,cur_e,next_e);
if(m==0)
printf("元素无后继元素\n");
else
printf("元素的后继元素为:%c\n",next_e);
printf("查找第几个元素:");
scanf("%d",&n);
k=GetElem_Sq(L,n,e);
if(k==0)
printf("无此元素\n");
else
printf("第%d个元素的值为%c\n",n,e);
ListLength_Sq(L);
Disp_Sq(L);
ListDelete_Sq(L,2,e);
Disp_Sq(L);
printf("The removed element is:%c\n",e);
Clearlist_Sq(L);
printf("L.length=%d\n",L.length);
ListEmpty_Sq(L);
}


相关文档
相关文档 最新文档