线性表的插入和删除(数据结构)

  • 格式:doc
  • 大小:103.00 KB
  • 文档页数:10

第 1 页 共 10 页 电子信息工程学系实验报告 ——适用于计算机课程

课程名称:

实验项目名称:线性表的插入和删除 实验时间: 2012、3、5

班级:计应102 姓名: 学号:

实 验 目 的:

熟悉掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,并熟悉其各自的优缺点及适用性。

实 验 环 境: C—Free5.0

实 验 内 容 及 过 程:

题目1:

编写程序实现下列的要求:

(1) 设数据元素为整数,实现这样的线性表的顺序存储表示。

(2) 键盘输入10个数据元素,利用顺序表的基本操作,建立该表。

(3) 利用顺序表的基本操作,找出表中的最大的和最小的数据元素(用于比较的数据元素为整数)。

(4) * 若数据元素为学生成绩(含姓名、成绩等字段),重新编程,实现上面的要求。要求尽可能少地修改前面的程序来得到新程序。(这里用于比较的字段为分数)

题目2:

编写程序实现下列的要求:

(1) 设学生成绩表中的数据元素为学生成绩(含姓名、成绩字段),实现这样的线性表的链式存储表示。

(2) 键盘输入若干个数据元素(用特殊数据来标记输入数据的结束),利用链表的基本操作(前插或后插算法),建立学生成绩单链表。

(3) 键盘输入关键字值x,打印出表中所有关键字值<=x的结点数据。(用于比较的关键字字段为分数)。

(4) 输入关键字值x,删除表中所有关键字值<=x的结点。(用于比较的关键字字段为分数)。

实 验 结 果 及 分 析:

题目一: 成 绩:

指导教师(签名): 第 2 页 共 10 页 (4):

题目二:

实 验 心 得:

通过这次的实验,对线性表和单链表的创建和修改有了初步的认识,和同学的讨论互相弥补了不足,相信在未来的学习中会有更大的收获。

附 录:

题目一代码:#include "stdio.h"

#include "conio.h"

typedef int datatype;

struct seqlist

{

int maxnum;

int n;

datatype *element;

};

typedef struct seqlist *Pseqlist;

Pseqlist creatnulllist_seq(int m) /* 建立空的顺序表 */

{

Pseqlist p=(Pseqlist)malloc(sizeof(struct seqlist));

if(p!=NULL)

{

p->element=(datatype *)malloc(sizeof(datatype)*m);

if(p->element!=NULL)

{

p->maxnum=m;

p->n=0;

return(p); 第 3 页 共 10 页 }

else free(p);

}

printf("out of space");

return NULL;

}

Pseqlist init_seq(Pseqlist p,int n) /* 初始化空的顺序表,即填充数据,顺序表的实际元素个数n 由参数提供*/

{

int i;

printf("input the element of seqlist:");

for(i=0;i

scanf("%d",&p->element[i]);

p->n=n;

return(p);

}

int insertpost_seq(Pseqlist p,int i,datatype x) /* 在i之后插入一个元素x */

{

int j;

if(p->n>=p->maxnum)

{

printf("overflow");

return(0);

}

if(i<0 || i>p->n )

{

printf("not exist");

return(0);

}

for(j=p->n-1; j>=i+1; j--)

p->element[j+1]=p->element[j];

p->element[i+1]=x;

p->n++;

return(1);

}

void print(Pseqlist p) /* 打印顺序表中的元素 */

{

int i;

for(i=0;in;i++)

printf("%d ",p->element[i]); 第 4 页 共 10 页 }

int FinMax(Pseqlist p)

{

int max=p->element[0];

int i;

for(i=1;in;++i)

{

if(maxelement[i])

max=p->element[i];

}

return max;

}

int FinMin(Pseqlist p)

{

int min=p->element[0];

int i;

for(i=1;in;++i)

{

if(min>p->element[i])

min=p->element[i];

}

return min;

}

main()

{

Pseqlist p;

int m,n,i,x,k;

printf("input the size of seqlist m:"); /* 输入顺序表的最大空间m,建立空的顺序表 */

scanf("%d",&m);

p=creatnulllist_seq(m);

printf("input the real number of seqlist n(n

scanf("%d",&n);

p=init_seq(p,n);

/* 输出插入之前顺序表的元素 */

print(p);

printf("\n");

printf("input i,x:");

scanf("%d%d",&i,&x); /* k的值用来表示是否插入成功 */

k=insertpost_seq(p,i,x);

if(k==1) print(p); /* 如果插入成功,输出插入之后顺序表的元素 */

printf("\nmax:%d,min:%d\n",FinMax(p),FinMin(p));

getch(); 第 5 页 共 10 页

}

题目一的(4)的代码:#include "stdio.h"

#include "conio.h"

//typedef int datatype;

typedef struct student

{

int score;

char name[30];

}datatype;

struct seqlist

{

int maxnum;

int n;

datatype *element;

};

typedef struct seqlist *Pseqlist;

Pseqlist creatnulllist_seq(int m) /* 建立空的顺序表 */

{

Pseqlist p=(Pseqlist)malloc(sizeof(struct seqlist));

if(p!=NULL)

{

p->element=(datatype *)malloc(sizeof(datatype)*m);

if(p->element!=NULL)

{

p->maxnum=m;

p->n=0;

return(p);

}

else free(p);

}

printf("out of space");

return NULL;

}

Pseqlist init_seq(Pseqlist p,int n) /* 初始化空的顺序表,即填充数据,顺序表的实际元素个数n 由参数提供*/

{

int i;

printf("输入10个分数:输入10个名字:");

for(i=0;i

scanf("%d%s",&p->element[i].score,p->element[i].name);

p->n=n; 第 6 页 共 10 页 return(p);

}

int insertpost_seq(Pseqlist p,int i,datatype x) /* 在i之后插入一个元素x */

{

int j;

if(p->n>=p->maxnum)

{

printf("overflow");

return(0);

}

if(i<0 || i>p->n )

{

printf("not exist");

return(0);

}

i-=2;

for(j=p->n-1; j>=i+1; j--)

p->element[j+1]=p->element[j];

p->element[i+1]=x;

p->n++;

return(1);

}

int FinMax(Pseqlist p)

{

int max=p->element[0].score;

int i;

for(i=1;in;++i)

{

if(maxelement[i].score)

max=p->element[i].score;

}

return max;

}

int FinMin(Pseqlist p)

{

int min=p->element[0].score;

int i;

for(i=1;in;++i)

{

if(min>p->element[i].score)