题目:参照程序2.1~2.7,编写代码,完成顺序表的初始化、查找、插入、删除、输出、撤销等操作。
部分代码:
顺序表的结构体定义:
typedef struct {
int n; //顺序表的长度
int maxLength; //顺序表的最大长度
ElemType *element; //存放动态分配一维数组首地址
}SeqList;
插入函数代码:
//初始化插入
Status Insert(SeqList *L, int i, ElemType x) {
int j;
if (i<-1 || i>L->n - 1) //判断下标i是否越界
return ERROR;
if (L->n == L->maxLength) //判断顺序表存储空间是否已满
return ERROR;
for (j = L->n - 1; j > i; j--) {
L->element[j + 1] = L->element[j]; //从后往前逐个后移元素
}
L->element[i + 1] = x; //将新元素放入下标为i+1的位置
L -> n = L->n + 1; //长度+1
return OK;
}
删除函数代码:
//顺序表的删除
Status Delete(SeqList *L, int i){
int j;
if(i<0||i>L->n-1){ //下标i是否越界
return ERROR;
}
if(!L->n){ //顺序表是否为空
return ERROR;
}
for(j=i+1;j<L->n;j++){
L->element[j-1]=L->element[j]; //从前往后逐个前移元素
}
L->n--; //表长减1
return OK;
}
完整代码:
#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef int Status;
typedef struct {
int n; //顺序表的长度
int maxLength; //顺序表的最大长度
ElemType *element; //存放动态分配一维数组首地址
}SeqList;
//顺序表初始化
Status Init(SeqList *L, int mSize) {
L->maxLength = mSize;
L->n = 0;
L->element = (ElemType*)malloc(sizeof(ElemType)*mSize);
if(!L->element)
return OK;
}
//顺序表的查找
Status Find(SeqList L,int i,ElemType *x){
if(i<0||i>L.n-1){
return ERROR; //判断元素下标i是否越界
}
*x=L.element[i]; //取出element[i]的值通过参数x返回
return OK;
}
//初始化插入
Status Insert(SeqList *L, int i, ElemType x) {
int j;
if (i<-1 || i>L->n - 1) //判断下标i是否越界
return ERROR;
if (L->n == L->maxLength) //判断顺序表存储空间是否已满
return ERROR;
for (j = L->n - 1; j > i; j--) {
L->element[j + 1] = L->element[j]; //从后往前逐个后移元素
}
L->element[i + 1] = x; //将新元素放入下标为i+1的位置
L -> n = L->n + 1; //长度+1
return OK;
}
//顺序表的删除
Status Delete(SeqList *L, int i){
int j;
if(i<0||i>L->n-1){ //下标i是否越界
return ERROR;
}
if(!L->n){ //顺序表是否为空
return ERROR;
}
for(j=i+1;j<L->n;j++){
L->element[j-1]=L->element[j]; //从前往后逐个前移元素
}
L->n--; //表长减1
return OK;
}
//顺序表输出
int Output(SeqList L) {
int i;
if (!L.n)
return ERROR; //判断顺序表是否为空
for (i = 0; i <= L.n - 1; i++)
printf("%d ", L.element[i]); //从前往后逐个输出元素
return OK;
}
//顺序表的撤销
void Destroy(SeqList *L){
(*L).n=0;
(*L).maxLength=0;
free((*L).element);
}
void main()
{
int i,x;
SeqList list;
Init(&list, 10); //对线性表初始化
for (i = 0; i < 9; i++) {
Insert(&list, i - 1, i); //将0-8插入到顺序表中
}
Output(list);
printf("\n");
Delete(&list,0); //删除0
Output(list);
Find(list,2,&x); //查找下标为2的元素并输出
printf("\nthe value is:");
printf("%d",x);
Destroy(&list);
}
实验结果:
版权声明:本文为博主原创文章,未经博主允许不得转载。