C++中顺序线性表的基本功能实现

编写线性表定义及基本操作函数
例如:建立具有5个元素的顺序表。
 L=(a,b,c,d,f)
  并完成如下操作:
(1)输出线性表
(2)求线性表L的长度
(3)获取第3个元素的值
(4)获取元素 a 在线性表中的位置
(5)在第4个元素前,插入元素g
(6)删除第5个元素的值

#include <malloc.h>
#include <stdio.h>
#define MaxSize 50
using namespace std;
typedef char ElemType;
定义类型
typedef struct
{
ElemType data[MaxSize];
int length;
}SqList;
线性表的创建
void CreateList(SqList *&L, ElemType a[], int n)//a中n个元素建立顺序表
{
int i = 0, k = 0;//k表示L中的元素个数,初始值为0
L = (SqList *)malloc(sizeof(SqList));//分配存放线性表的空间
while (i < n)//i扫描数组a的元素
{
L->data[k] = a[i];
k++; i++;
}
L->length = k;//设置L的长度k
}
初始化线性表
void InitList(SqList *&L)
{
L = (SqList *)malloc(sizeof(SqList));//分配存放线性表的空间
L->length = 0;//置空线性表的长度为0
}
线性表的销毁
void DestroyList(SqList *&L)
{
free(L);//释放线性表L
}
判断线性表是否为空,如果为空则返回true,否则返回false
int ListEmpty(SqList *L)
{
return(L->length == 0);
}
输出线性表中的各个元素
void DispList(SqList *L)
{
int i;
if (ListEmpty(L)) return;//判断是否为空表
for (i = 0; i < L->length; i++)
printf("%c “, L->data[i]);//依次输出线性表中的元素
printf(”\n");
}
求线性表中的某个元素值
int GetElem(SqList *L, int i, ElemType &e)
{
if (i<1 || i>L->length)
return 0;//参数i不满足条件即i不在线性表的范围内时返回0
e = L->data[i - 1];//取出元素值
return 1;
}
顺序查找第一个值域与e逻辑等的元素
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;
}
在线性表的第i个位置插入元素e
int ListInsert(SqList *&L, int i, ElemType e)
{
int j;
if (i<1 || i>L->length + 1)//如果i不在线性表范围内返回0
return 0;
i–;//逻辑序号转化为物理序号
for (j = L->length; j > i; j–)
L->data[j] = L->data[j - 1];
L->data[i] = e;
L->length++;
return 1;
}
删除线性表的第i个元素
int ListDelete(SqList *&L, int i, ElemType &e)
{
int j;
if (i<1 || i>L->length)
return 0;
i–;
e = L->data[i];
for (j = i; j < L->length - 1; j++)
L->data[j] = L->data[j + 1];
L->length–;
return 1;
}
求线性表的长度,即返回length域的值
int ListLength(SqList *&L)
{
return L->length;
}
在main函数调用
int main()
{
SqList *L;
ElemType e;
InitList(L);
ListInsert(L, 1, ‘a’);
ListInsert(L, 2, ‘b’);
ListInsert(L, 3, ‘c’);
ListInsert(L, 4, ‘d’);
ListInsert(L, 5, ‘f’);

printf("新建线性表元素如下:\n");
DispList(L);

printf("线性表长度:%d\n", ListLength(L));

GetElem(L, 3, e);
printf("取到的第三个元素是:e=%c\n", e);

printf("LocateElem(L,'a')=%d\n", LocateElem(L, 'a'));

ListInsert(L, 4, 'g');
DispList(L);
ListDelete(L, 3, e);
DispList(L);
DestroyList(L);
return 0;

}
线性表的基本操作函数并不难理解,这是完整代码,可以提供理解的一个思路吧。代码后也有相关注释的。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++线性表顺序存储结构可以用来实现图书管理系统,其基本思路是将所有的图书信息存储在一个数组,每本书对应数组的一个元素。每个元素包含图书的相关信息,如编号、名称、作者、出版社、价格等等。 具体实现过程,需要定义一个结构体来存储每本书的信息,然后使用数组来存储所有的书籍。可以定义如下的结构体: ``` struct Book { int id; // 书籍编号 string name; // 书籍名称 string author; // 作者 string publisher; // 出版社 double price; // 价格 }; ``` 接下来,我们可以定义一个类来实现图书管理系统。这个类包括添加图书、删除图书、查找图书等基本功能。其,添加图书操作可以使用数组的末尾添加,删除图书操作可以使用移动元素位置来实现,查找图书操作可以遍历整个数组进行查找。 下面是一个简单的示例代码: ``` #include <iostream> #include <string> using namespace std; const int MAX_SIZE = 100; // 数组最大长度 class BookManagementSystem { private: Book books[MAX_SIZE]; // 用于存储图书信息的数组 int size; // 数组存储的图书数量 public: BookManagementSystem() { size = 0; } // 添加图书 void addBook(int id, string name, string author, string publisher, double price) { if (size >= MAX_SIZE) { cout << "图书库已满,无法添加新书!" << endl; return; } books[size].id = id; books[size].name = name; books[size].author = author; books[size].publisher = publisher; books[size].price = price; size++; cout << "添加成功!" << endl; } // 删除图书 void deleteBook(int id) { int pos = -1; // 找到要删除的元素位置 for (int i = 0; i < size; i++) { if (books[i].id == id) { pos = i; break; } } if (pos == -1) { cout << "未找到该编号的图书!" << endl; return; } for (int i = pos; i < size - 1; i++) { books[i] = books[i + 1]; } size--; cout << "删除成功!" << endl; } // 查找图书 void searchBook(int id) { for (int i = 0; i < size; i++) { if (books[i].id == id) { cout << "编号:" << books[i].id << endl; cout << "名称:" << books[i].name << endl; cout << "作者:" << books[i].author << endl; cout << "出版社:" << books[i].publisher << endl; cout << "价格:" << books[i].price << endl; return; } } cout << "未找到该编号的图书!" << endl; } }; int main() { BookManagementSystem bms; bms.addBook(1001, "C++程序设计", "张三", "清华大学出版社", 39.8); bms.addBook(1002, "Java程序设计", "李四", "人民邮电出版社", 45.6); bms.addBook(1003, "Python编程入门", "王五", "电子工业出版社", 29.9); bms.deleteBook(1002); bms.searchBook(1003); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值