加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

顺序表的操作实验报告(C语言)

(2012-04-05 16:45:51)
标签:

顺序表的操作

实验报告

c语言

杂谈

分类: 数据结构

《数据结构》实验报告

实验室:******

实验日期和时间:*******

班级:******

学号:******

姓名:****

成绩及教师评语:

实验一顺序表的操作

一.我的实验选题:顺序表的相关操作和实现

二.实验主要内容和目的

实验主要内容:

实验目的:编制一个演示顺序表插入、删除、查找、逆序等操作的程序。

三.概要设计

  1. 为了实现上述程序功能,需要定义单链表的抽象数据类型:

  ADT LinkList {

   数据对象:D={ai|ai∈IntegerSet,i=0,1,2,…,n,n≥0}

   数据关系:R={<ai,ai+1>|ai,ai+1 ∈D}

   基本操作:

creat_list(*L))

操作结果:构造一个长度为n的线性表L,并对应输入元素。.

out_list(L)

初始条件:有一个长度为n的含有具体元素线性表

操作结果:输出一个长度为n的元素并输出各个对应位序上的元素

insert_sq(*L, i, e)

初始条件:表L已存在

  操作结果:将元素e插入到表L的i位置

delete_sq(*L, i)

  初始条件:表L已存在

  操作结果:将表L中i位置的元素删除,元素值置入e中返回

locat_sq(L, e)  

初始条件: 表L依存在

操作结果:表L中查找是否元素e,并指明位序i

nixu_sq(*L)

初始条件:表L依存在

操作结果:表L中元素逆序排列

} ADT LinkList

 2) 本程序包含7个函数:

  1. 主函数main()
  2. 建立线性表creat_list()
  3. 输出线性表out_list()
  4. 插入元素函数insert_sq()
  5. 删除元素函数delete_sq()
  6. 查找元素函数locat_sq()
  7. 逆序输出元素nixu_sq()
  8. 各函数间关系如下:

四.运用的存储结构说明

顺序存储结构

五.主要算法及相关函数功能、参数说明

1结点类型和指针类型

  typedef struct

{ElemType a[MAXSIZE];

int length;

}SqList;/

2.switch(k)循环语句,随之k的选择而进行不同的操作

3

  1. 主函数main()
  2. 建立线性表creat_list()

参数SqList *L

c.输出线性表out_list()

参数SqList L

d.插入元素函数insert_sq()

参数 SqList *L,int i,ElemType e

e.删除元素函数delete_sq()

SqList *L,int i

f.查找元素函数locat_sq()

SqList L,ElemType e

g.逆序元素函数nixu_sq()

SqList *L

六.在设计和调试程序时我遇到的主要问题及其解决方案

七.程序运行结果截图

起始窗口:

建立线性表:

插入:

删除:

查找:

逆序:

实验结论:实验成功

八.我对本次实验的总结

1.通过对顺序表的删除、插入、查找、逆序等操作让我更了解线性表

2.通过我对顺序表的操作的编程我更理解单程序多功能的实现

九.附录

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{ElemType a[MAXSIZE];
int length;
}SqList;
SqList a,b,c;


void creat_list(SqList *L);
void out_list(SqList L);
void insert_sq(SqList *L,int i,ElemType e);
void nixu_sq(SqList *L);
ElemType delete_sq(SqList *L,int i);
int locat_sq(SqList L,ElemType e);


void main()
{int i,k,loc;ElemType e,x;char ch;
do{printf("\n\n\n");
printf("\n 1.建立线性表");
printf("\n 2.插入元素");
printf("\n 3.删除元素");
printf("\n 4.查找元素");
printf("\n 5.逆序输出元素");
printf("\n 0.结束程序运行");
printf("\n ===========================================");
printf("\n 请输入您的选择(1,2,3,4,5,0)");
scanf("%d",&k);
switch(k)
{case 1:{creat_list(&a);
out_list(a);
}break;

case 2:{printf("\n请输入插入位置(大于等于1,小于等于%d):",a.length+1);
scanf("%d",&i);
printf("\n请输入要插入的元素:");
scanf("%d",&e);
insert_sq(&a,i,e);
out_list(a);
}break;
case 3:{printf("\n请输入删除元素位置(大于等于1,小于等于%d):",a.length);
scanf("%d",&i);
x=delete_sq(&a,i);
if(x!=-1)
printf("\n删除的元素为:%d\n",x);
else printf("要删除的元素不存在!");
}break;

case 4:{printf("\n请输入要查找的元素值:");
scanf("%d",&e);
loc=locat_sq(a,e);
if(loc==-1)
printf("\n未找到指定元素!");
else printf("\n已找到,元素位置是%d",loc);
}break;
case 5:{printf("\n逆序输出元素:");
nixu_sq(&a);
out_list(a);
}break;
}
}while(k!=0);
printf("\n 按回车键,返回...\n");
ch=getchar();
}

void creat_list(SqList *L)
{int i;
printf("请输入线性表的长度:");
scanf("%d",&L->length);
for(i=0;i<L->length;i++)
{printf("%d=",i);
scanf("%d",&(L->a[i]));
}
}

void out_list(SqList L)
{int i;
for(i=0;i<=L.length-1;i++)
printf("d",L.a[i]);
}

void insert_sq(SqList *L,int i,ElemType e)
{int j;
if(L->length==MAXSIZE) printf("线性表已满!\n");
else if(i<1||i>L->length+1)
printf("请输入位置错误!\n");
else{for(j=L->length-1;j>=i-1;j--)L->a[j+1]=L->a[j];

L->a[i-1]=e;
L->length++;
}
}

ElemType delete_sq(SqList *L,int i)
{ElemType x;
int j;
if(L->length==0)
printf("空表!\n");
else if(i<1||i>L->length+1){printf("输入位置错!\n");
x=-1;
}
else{x=L->a[i-1];
for(j=i;j<=L->length-1;j++)L->a[j-1]=L->a[j];
L->length--;
}
return(x);
}

int locat_sq(SqList L,ElemType e)
{int i=0;
while(i<=L.length-1&&L.a[i]!=e)i++;
if(i<=L.length-1)return(i+1);
else return(-1);
}

void nixu_sq(SqList *L){
int i,item;
for(i=0;i<L->length/2;i++){
item=L->a[i];
L->a[i]=L->a[L->length-i-1];
L->a[L->length-i-1]=item;
}
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有