数据结构线性表的基本操作及应用实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验日期2010.4.19 教师签字成绩
实验报告
【实验名称】第二章线性表的基本操作及应用
【实验目的】
(1)熟练掌握线性表的基本操作的实现;
(2)以线性表的各种操作(建立、插入、删除等)的实现为重点;
(3)通过本次实验加深对C语言的使用(特别是函数的参数调用、指针类型的应用和链表的建立等各种基本操作)。
【实验内容】
1.顺序表的基本操作(顺序表的插入、访问、删除操作)
#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int ElemType;
typedef int Status;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
Status InitList_Sq(SqList *L){
int i,n;
L->elem = (ElemType * )malloc(LIST_INIT_SIZE*sizeof(ElemType));
if (! L->elem) exit (OVERFLOW);
printf("您希望您的顺序表有几个元素: ");
scanf("%d",&n);
printf("\n");
printf("输入您的%d个元素,以构建顺序表: \n",n);
for(i=1;i<=n;i++)
scanf("%d",&L->elem[i-1]);
L->length = n;
L->listsize = LIST_INIT_SIZE;
return OK;
}//InitList_Sq
Status PrintList_Sq(SqList L){
int i;
printf("顺序表中的元素为:");
for (i=1;i<=L.length;i++)
printf("%d ",L.elem[i-1]);
printf("\n");
return OK;
}//PrintList_Sq
int ListInsert_Sq(SqList* L,int i,ElemType x) //对顺序表进行插入操作{int j;
if (L->length==L->listsize)
{printf("\t\t\t顺序表已满");return 0;}
else
{
if (i<1||i>L->length)
{printf("\t\t\t位置不合法");return 0;}
else
{
for(j=L->length-1;j>=i-1;--j)
L->elem[j+1]=L->elem[j];
L->elem[i-1]=x;
L->length++;
return 1;
}
}
}
int ListDelete_Sq(SqList* L,int i) //对顺序表进行删除操作
{int j;
if (i<1||i>L->length)
{printf("\t\t\t不存在第i个元素");return 0;}
else
{
for (j=i-1;j
{
L->elem[j]=L->elem[j+1];
}
L->length--;
return 1;
}
}
int LocateElem(SqList *L, int i) {
if(i<1||i>L->length)return ERROR;
else return L->elem[i-1];
}
int scan()
{
int choose;
printf("选择要执行的基本操作:\n1.插入元素;2.删除元素;3.访问元素.\n");
printf("输入其他值退出程序……\n");
scanf("%d",&choose);
return(choose);
}
void main(){
SqList L;
ElemType e;
int i;
int quit=0;
if (InitList_Sq(&L)==OVERFLOW)
printf("分配失败,退出程序!");
printf("输出程序中的元素\n");
PrintList_Sq(L);
while(!quit)
switch(scan()){
case 1:printf("\n请输入你所需要插入的位置和你要插入的元素:");
printf("\n请输入i和e的值:");
scanf("%d%d",&i,&e);
if (ListInsert_Sq(&L,i,e)==OK) PrintList_Sq(L);break;
case 2:printf("\n请输入你所需要删除元素的位置:");
scanf("%d",&i);
if(ListDelete_Sq(&L,i)==OK) PrintList_Sq(L);break;
case 3:printf("请输入所要查找元素的位置:\n");
scanf("%d",&i);
if(LocateElem(&L,i))
printf("该位置元素的值为:%d!\n",LocateElem(&L,i));
else printf("该位置的元素不存在!\n");break;
default:quit=1;