IDE:Visual Studio 2019
头文件header.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define FALSE -1
#define TRUE 1
#define ERROR -1
#define OVERFLOW -2
#define INFEASIBLE -1
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int Status;
typedef int ElementType;
typedef struct{
ElementType *data;
int lengths;
int listsize_sq;
}Sq_list;
头文件means.h
#include "header.h"
//1.初始化表L
Status Initsqlist(Sq_list &L) {//&是C++中的引用调用方法
L.data = (ElementType*)malloc(LIST_INIT_SIZE * sizeof(ElementType));
if (!L.data)exit(OVERFLOW);
L.lengths = 0;
L.listsize_sq = LIST_INIT_SIZE;
return OK;
}//Initsqlist
//2.销毁线性表L
void Destorylist(Sq_list &L) {
if (L.data)free(L.data);
L.lengths = 0;
}
//3.将L重置为空表
void Clearlist(Sq_list& L) {
if (L.data)L.lengths = 0;
}
//4.判别L是否为空表
Status Emptylist(Sq_list L) {
if (!L.lengths)return TRUE;
else return FALSE;
}
//5.返回L的长度
int Lengthlist(Sq_list L) {
printf("表长为%d\n", L.lengths);
return L.lengths;
}
//6.查找第i个元素
Status GetElem(Sq_list L,int i,ElementType &e) {
if (i<1 || i>L.lengths)return ERROR;
return e = L.data[i-1];
}
//7.按值查找
Status LocateElem(Sq_list L, ElementType e) {
int i;
for (i = 0; i < L.lengths; i++) {
if (e == L.data[i])return i + 1;
}
return FALSE;
}
//8.插入
Status InsertElem(Sq_list& L, int i, ElementType e) {
if (i<1 || i>L.lengths+1)return ERROR;
if (L.lengths >= L.listsize_sq) {
ElementType* newbase = (ElementType*)realloc(L.data, (L.listsize_sq + LISTINCREMENT) * sizeof(ElementType));
if (!newbase)exit(OVERFLOW);
L.data = newbase;
L.listsize_sq += LISTINCREMENT;
}
ElementType* q, * p;
q = &(L.data[i-1]);
for (p = &(L.data[L.lengths - 1]); p >= q; --p)
*(p + 1) = *p;
*q = e;
++L.lengths;
return OK;
}
//9.删除
Status DeleteElem(Sq_list& L, int i,ElementType &e) {
if (i<1 || i>L.lengths)return ERROR;
ElementType* p, * q;
p = &L.data[i - 1];
e = *p;
q = L.data + L.lengths;
for (++p; p<q; p++) {
*(p - 1) = *p;
}
L.lengths--;
return OK;
}
//10.遍历
void displist(Sq_list L) {
for (int i = 1; printf("%d ", L.data[i-1]), i < L.lengths ; i++) {
if (!i % 10)printf("\n");
}
printf("\n");
}
//11.创建一个非空表
Status Createlist(Sq_list& L) {
L.data = (ElementType*)malloc(LIST_INIT_SIZE * sizeof(ElementType));
if (!L.data)exit(OVERFLOW);
printf("请输入顺序表的长度\n");
scanf_s("%d", &L.lengths);
L.listsize_sq = LIST_INIT_SIZE;
int i;
printf("请依次输入线性表元素:\n");
for (i = 0; i < L.lengths; i++){
scanf_s("%d", &L.data[i]);
}
Lengthlist(L);
displist(L);
}
//12.前驱
//13.后驱
源文件main.cpp
#include "header.h"
#include "means.h"
int main() {
Sq_list L;
int a,b,c,d,e,i;
Createlist(L);
printf("\n请输入要查询位置的元素:\n");
scanf_s("%d", &a);
c=LocateElem(L, a);
printf("\n查询的位置为%d:\n", c);
printf("\n请输入要查询元素的位置:\n");
scanf_s("%d", &i);
GetElem(L, i, b);
printf("\n查询的元素为%d:\n",b);
scanf_s("%d %d", &i,&d);
InsertElem(L, i, d);
displist(L);
scanf_s("%d", &i);
DeleteElem(L, i, e);
displist(L);
return OK;
}
有问题欢迎一起讨论^^