C语言程序设计实践
综合题目:顺序表基本算法班级:
姓名:
同组人员:
提交日期:
一、程序功能:
1、建立一个顺序表。
2、对建立好的顺序表进行一些基本的操作,如:
a.顺序表的类型定义。
b.求顺序表长操作。
c.取顺序表元素操作。
d.按值查找操作。
e.显示元素操作。
f.插入操作。
g.删除操作。
h.显示元素操作。
二、算法设计思想:
用一组存储单元来存放线性表中的数据元素,把顺序表中的所有元素按照其逻辑结构顺序依次储存到从计算机储存器中指定储存位置开始的一块连续的储存空间。
线性表中的第一个位置储存在数组的起始位置(下标为0)在定义一个顺序表时,除了定义一个数组来储存线性表中的所有元素,还需要定义一个整型变量来储存线性表的实际长度。
然后通过对数组元素中的元素进行操作,对顺序表进行基本算法。
三、算法运行结果
1、显示整个功能
2、设置顺序表的长度:
3、求出并返回顺序表的长度:
4、在顺序表中取出某个位置的元素并返回其值:
5、显示顺序表中的元素:
6、在顺序表的某个位置插入元素:
7、删除顺序表中的某个元素
8、输出顺序表
9、将顺序表逆序输出
10、退出对顺序表的操作:
四、收获及体会
通过对顺序表的几个基本运算的调用,实现顺序表的几个基本算法。
同时也懂得如何定义顺序表,还有顺序表的用法。
五、算法源代码
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 50
typedef int ElemType ;
typedef struct
{
ElemType data[MaxSize];
int length;
}SqList; //顺序表类型
void InitList(SqList *& L); //初始化顺序表
void CreateList(SqList*& L,ElemType a[],ElemType n); //建立顺序表
bool ListEmpty(SqList *L); //判断顺序表是否为空表
int ListLength(SqList *L); //求顺序表长度
void DispList(SqList *L); //输出顺序表
bool GetElem(SqList *L,ElemType i,ElemType &e); //求顺序表中某个元素值int LocateElem(SqList *L,ElemType e); //按照元素值查找
bool ListInsert(SqList *& L,ElemType i,ElemType e); //插入元素e
bool ListDelete(SqList *& L,int i,ElemType &e); //删除元素
void DestroyList(SqList *&L); //销毁顺序表
void InitList(SqList *& L) //初始化顺序表
{
L=(SqList*)malloc(sizeof(SqList));
L->length=0;
}
void CreateList(SqList*& L,ElemType a[],ElemType n) //建立顺序表 2 {
int i;
L=(SqList *)malloc(sizeof(SqList));
for(i=0;i<n;i++)
L->data[i]=a[i];
L->length=n;
}
bool ListEmpty(SqList *L) //判断顺序表是否为空表
{
return(L->length==0);
}
int ListLength(SqList *L) //求顺序表长度
{
return(L->length);
}
void DispList(SqList *L) //输出顺序表
{
int i;
for(i=0;i<L->length;i++)
printf("%3d",L->data[i]);
printf("\n");
}
bool GetElem(SqList *L,ElemType i,ElemType &e) //求顺序表中某个元素值{
if(i<1||i>L->length)
return false;
e=L->data[i-1];
return true;
}
int LocateElem(SqList *L,ElemType e) //按照元素值查找
{
int i=0;
while(i<L->length&&L->data[i]!=e)
i++;
if(i>L->length)
return 0;
else
return i+1;
}
bool ListInsert(SqList *& L,ElemType i,ElemType e) //插入元素e {
int j;
if(i<1||i>L->length+1)
return false;
i--;
for(j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return true;
}
bool ListDelete(SqList *& L,int i,ElemType &e) //删除元素{
int j;
L = NULL;
if(i<1||i>L->length)
return false;
i--;
e=L->data[i];
for(j=i;j<L->length-1;j++)
L->data[j]=L->data[j+1];
L->length--;
return true;
}
void DestroyList(SqList *&L) //销毁顺序表
{
free(L);
L = NULL;
}。