当前位置:文档之家› 实验报告一顺序表的操作

实验报告一顺序表的操作

《数据结构》实验报告一
系别:班级:
学号:姓名:
日期:指导教师:
一、上机实验的问题和要求:
顺序表的查找、插入与删除。

设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。

具体实现要求:
从键盘输入10个整数,产生顺序表,并输入结点值。

从键盘输入1个整数,在顺序表中查找该结点的位置。

若找到,输出结点的位置;若找不到,则显示“找不到”。

从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出顺序表所有结点值,观察输出结果。

从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。

二、程序设计的基本思想,原理和算法描述:
(包括程序的结构,数据结构,输入/输出设计,符号名说明等)
三、源程序及注释:
#include <>
/*顺序表的定义:*/
#define ListSize 100 /*表空间大小可根据实际需要而定,这里假设为100*/ typedef int DataType; /*DataType可以是任何相应的数据类型如int, float或char*/ typedef struct
{ DataType data[ListSize]; /*向量data用于存放表结点*/
int length; /*当前的表长度*/
}SeqList;
/*子函数的声明*/
void CreateList(SeqList * L,int n); /*创建顺序表函数*/
int LocateList(SeqList L,DataType x); /*查找顺序表*/
void InsertList(SeqList * L,DataType x,int i); /*在顺序表中插入结点x*/
void DeleteList(SeqList * L,int i);/*在顺序表中删除第i个结点*/
void PrintList(SeqList L,int n); /*打印顺序表中前n个结点*/
void main()
{
SeqList L;
int n=10,x,i; /*欲建立的顺序表长度*/
=0;
/*调用创建线性表函数*/
printf("create function:\n");
CreateList(&L,n); /*建立顺序表*/
PrintList(L,n); /*打印顺序表*/
/*调用查找函数*/
printf("search function:\n");
printf("input the data you want to search:");
scanf("%d",&x);
i=LocateList(L,x); /*顺序表查找*/
if (i==0)
printf("sorry,don't find %d!\n\n",x);
else
printf("i have find the %d,it locate in %d!\n\n",x,i);
/*调用插入函数*/
printf("Insert function:\n");
printf("输入要插入的位置:(input the position:)");
scanf("%d",&i);
printf("输入要插入的元素:(input the data:)");
scanf("%d",&x);
InsertList(&L,x,i); /*顺序表插入 */
PrintList(L,n); /*打印顺序表 */
/*调用删除函数*/
printf("delete function:\n");
printf("输入要删除的位置:(input the position:)");
scanf("%d",&i);
DeleteList(&L,i); /*顺序表删除 */
PrintList(L,n); /*打印顺序表 */
}
/*顺序表的建立:*/
void CreateList(SeqList *L,int n)
{ int i;
for (i=0;i<n;i++)
{ printf("\ninput the %d data:",i+1);
scanf("%d",&(*L).data[i]);
}
(*L).length=n;
}
/*顺序表的查找:*/
int LocateList(SeqList L,DataType x)
{ int i=0;
while (i<&&x!=[i])
++i;
if (i< return i+1;
else return 0;
}
/*顺序表的插入:*/
void InsertList(SeqList *L,DataType x,int i)
{/*将新结点x插入L所指的顺序表的第i个结点的位置上 */ int j;
if (i<0||i>(*L).length)
{
printf("插入位置非法");
exit(0);
}
if ((*L).length>=ListSize)
{
printf("表空间溢出,退出运行");
exit(0);
}
for (j=(*L).length-1;j>=i-1;j--)
(*L).data[j+1]=(*L).data[j]; /*顺序表元素从后向前依次后移*/ (*L).data[i-1]=x; /*将x插入第i个结点位置*/
(*L).length++; /*表长自增1*/
}
/*顺序表的删除:*/
void DeleteList(SeqList *L,int i)
{/*从L所指的顺序表中删除第i个结点 */
int j;
if (i<0 || i>(*L).length)
{
printf("删除位置非法");
exit(0);
}
for (j=i;j<=(*L).length-1;j++)
(*L).data[j]=(*L).data[j+1]; /*顺序表自第i个结点开始,依次前移*/
(*L).length--; /*表长自减1*/
}
/*顺序表的打印:*/
void PrintList(SeqList L,int n)
{ int i;
printf("the sequal list data is:");
for (i=0;i<n;i++)
printf("%d ",[i]);
printf("\n\n");
}
四、运行输出结果:
五、调试和运行程序过程中产生的问题及采取的措施:
六、对算法的程序的讨论、分析,改进设想,其它经验教训:
七、对实验方式、组织、设备、题目的意见和建议:。

相关主题