数据结构实验课教案

时间:2025-04-05

数据结构,实验,老师,教案

数据结构教案

实验一:线性表的顺序表示与实现

实验学时:2学时

一.实验目的:

1.掌握线性表的顺序存储结构;

2.掌握在顺序表上进行的插入、删除、查找、修改等操作。

二.实验内容:

1.分别建立顺序表,并输入初始数据;

2.对顺序表分别编写插入、删除、查找、修改等函数。

三.实验重点:

顺序表的建立及操作。

四.实验要求:

1.用C语言编写程序源代码;

2.要分别完成建立、插入、删除、查找、修改五种功能。

3.源程序必须编译调试成功,独立完成。

五. 实验器材:

一个装有C语言编译环境的计算机。

六.实验步骤:

顺序表 :

1.定义头文件和顺序表的存储结构类型等

#define ok 1

#define error 0

#define overflow 0

#define null 0

#include<stdio.h>

#include<stdlib.h>

#define list_init_size 100

#define listincrement 10

typedef int elemtype;

typedef int status;

typedef struct{

elemtype *elem;

int length;

int listsize;

}sqlist;

数据结构,实验,老师,教案

2.编写构造空顺序表的函数

status listinit(sqlist *l)

{

l->elem=(elemtype *)malloc(list_init_size*sizeof(elemtype));

if(!l->elem)

return overflow;

l->length=0;

l->listsize=list_init_size;

return ok;

}

3.编写对顺序表进行插入操作的函数:

status listinsert(sqlist *l,int i,elemtype e)

{

elemtype *newbase,*q,*p;

if(i<1||i>listlength(*l)+1)

return error;

if(l->length==l->listsize)

{

newbase=(elemtype *)realloc(l->elem,(l->listsize+listincrement)*sizeof(elemtype));

if(!newbase)

return overflow;

l->listsize+=listincrement;

}

q=&(l->elem[i-1]);

for(p=&(l->elem[l->length])-1;p>=q;--p)

*(p+1)=*p;

*q=e;

++l->length;

return ok;

}

4.编写对顺序表进行删除操作的函数:

status listdelete(sqlist *l,int i,elemtype *e)

{

elemtype *p,*q;

if(i<1||i>l->length)

return error;

p=&(l->elem[i-1]);

*e=*p;

q=l->elem+l->length-1;

for(++p;p<=q;++p)

*(p-1)=*p;

--l->length;

数据结构,实验,老师,教案

return ok;

}

5.编写对顺序表进行查找操作的函数:

status getelem(sqlist l,int i,elemtype *e)

{

if(i<1||i>listlength(l))

return error;

*e=l.elem[i-1];

return ok;

}

6.编写对顺序表进行修改操作的函数:

status locateelem(sqlist l,elemtype e)

{

int i;

for(i=0;i<listlength(l);i++)

if(l.elem[i]==e)

return i+1;

return 0;

}

7.编写实现两个线性表的归并操作的函数

void mergelist(sqlist la,sqlist lb,sqlist *lc)

{

int i,j,k;

int la_len,lb_len;

elemtype ai,bj;

i=j=1; k=0;

listinit(lc);

la_len=listlength(la); lb_len=listlength(lb);

while(i<=la_len&&j<=lb_len)

{

getelem(la,i,&ai);

getelem(lb,j,&bj);

if(ai<=bj)

{

listinsert(lc,++k,ai);

++i;

}

else

{

listinsert(lc,++k,bj);

数据结构,实验,老师,教案

++j;

}

}

while(i<=la_len)

{

getelem(la,i++,&ai);

listinsert(lc,++k,ai);

}

while(j<=lb_len)

{

getelem(lb,j++,&bj);

listinsert(lc,++k,bj);

}

}

8.销毁线性表、清空线性表、判空、求表长等

status destroylist(sqlist *l)

{

if(l->elem)

free(l->elem),l->elem=null;

return ok;

}

status clearlist(sqlist *l)

{

l->length=0;

return ok;

}

status listempty(sqlist l)

{

return(l.length==0);

}

status listlength(sqlist l)

{

return l.length;

}

9.打印线性表

数据结构,实验,老师,教案

void print(sqlist l)

{

int i;

printf("\nlist: ");

for(i=0;i<l.length;i++)

printf("%d ",l.elem[i]);

}

10. 编写主函数

void main()

{

int i;

int n;

elemtype a;

sqlist l,la,lb,lc;

clrscr();

listinit(&l); listinit(&la); listinit(&lb);

printf("please input list number");

scanf("%d",&n);

printf("\n");

for(i=0;i<n;i++)

{

scanf("%d",&a);

listinsert(&l,i+1,a);

}

print(l);

printf("\nlist length:%d",listlength(l));

getelem(l,4,&a);

printf("\ngetelem(l,4,&a),%d",a);

listdelete(&l,3,&a);

printf("\nlistdelete(&l,3,&a),%d",a);

print(l);

printf("\ninput list la");

for(i=0;i<5;i++)

{

scanf("%d",&a);

listinsert(&la,i+1,a);

}

printf("\ninput list lb");

数据结构,实验,老师,教案

for(i=0;i<7;i++)

{

scanf("%d",&a);

listinsert(&lb,i+1,a);

}

mergelist(la,lb,&lc);

print(la);print(lb);print(lc);

}

数据结构,实验,老师,教案

< …… 此处隐藏:7522字,全部文档内容请下载后查看。喜欢就下载吧 ……
数据结构实验课教案.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219