博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
静态链表的基本实现过程(C++)
阅读量:4050 次
发布时间:2019-05-25

本文共 2802 字,大约阅读时间需要 9 分钟。

自我感觉静态链表的实现过程比动态链表困难了不少,需要考虑更多的参数和更多的边界条件。还需要不断加强训练,写代码的过程比较混乱,而且不能够完全不看书。戒骄戒躁,继续加油。

静态链表与链表的顺序存储结构一样,也是将数据存储在数组中。
本例题中,数组的每个元素都是一个string对象。代码及函数功能如下:

struct Node   //定义的每个节点的内容{
string data; int cur;};bool InitList(Node *sl) //链表初始化,主要是将每个节点中的cur赋值,还有首尾;int Malloc_SLL(Node *sl) //返回下一个空闲空间位置;int ListLength(Node *sl) //返回List的长度;bool ListInsertHead(Node *sl) //为初始化的链表赋初始值;bool ListInsert(Node *sl, int i) //在链表的第i个位置插入新元素void show(Node *sl) //展示链表中的所有元素;void free_SLL(Node * ls, int i) //释放删除的内存空间,并对链表的指示性参数赋值;bool ListDelete(Node *sl, int k) //删除第k个位置的元素;

静态链表实现头文件

#pragma once#ifndef LINEARLIST_H_#define LINEARLIST_H_#include
using namespace std;const int MAXSIZE = 10000;struct Node{
string data; int cur;};bool InitList(Node *sl){
for (int i = 0; i < MAXSIZE-1; i++) sl[i].cur = i + 1; sl[MAXSIZE - 1].cur = 1; return true;}int Malloc_SLL(Node *sl){
int i = sl[0].cur; if(i) sl[0].cur = sl[i].cur; return i;}int ListLength(Node *sl){
int index = sl[MAXSIZE - 1].cur; int k = 0; while (index) {
index = sl[index].cur; k++; } return k;}bool ListInsertHead(Node *sl){
string input; int insert; cout << "Enter a new string data (q to quit): "; getline(cin, input); while(input != "q"){
insert = Malloc_SLL(sl); sl[insert].data = input; cout << "Enter a new string data (q to quit): "; getline(cin, input); } sl[insert].cur = 0; return true;}bool ListInsert(Node *sl, int i){
if (i<1 || i>ListLength(sl) + 1) return false; int insert = Malloc_SLL(sl); string input; cout << "Enter a new string data: "; getline(cin, input); sl[insert].data = input; int index = sl[MAXSIZE - 1].cur; for (int k = 1; k < i-1; k++) index = sl[index].cur; sl[insert].cur = sl[index].cur; sl[index].cur = insert; return true;}void show(Node *sl){
int idx = sl[MAXSIZE - 1].cur; int i = 1; while (idx) {
cout << "# " << i << ": " << sl[idx].data << endl; i++; idx = sl[idx].cur; }}void free_SLL(Node * ls, int i){
ls[i].cur = ls[0].cur; ls[0].cur = i;}bool ListDelete(Node *sl, int k){
if (k<1 || k>ListLength(sl)) return false; int index = sl[MAXSIZE - 1].cur; for (int i = 1; i < k - 1; i++) index = sl[index].cur; int temp = sl[index].cur; sl[index].cur = sl[temp].cur; free_SLL(sl, temp);}#endif // !LINEARLIST

静态链表使用示例

#include
#include"linearlist.h"#include
#include
using namespace std;void main(){
Node StaticLinkList[MAXSIZE]; InitList(StaticLinkList); cout << "Enter initial value for List: \n"; ListInsertHead(StaticLinkList); cout << "\nYour list is:\n"; show(StaticLinkList); cout << "\nInsert a data:\n"; ListInsert(StaticLinkList, 2); cout << "\nAfter insert a data:\n"; show(StaticLinkList); ListDelete(StaticLinkList, 5); cout << "\nAfter delete a data:\n"; show(StaticLinkList);}

转载地址:http://msyci.baihongyu.com/

你可能感兴趣的文章
关于phpcms中模块_tag.class.php中的pc_tag()方法的含义
查看>>
vsftp 配置具有匿名登录也有系统用户登录,系统用户有管理权限,匿名只有下载权限。
查看>>
linux安装usb wifi接收器
查看>>
多线程使用随机函数需要注意的一点
查看>>
getpeername,getsockname
查看>>
让我做你的下一行Code
查看>>
浅析:setsockopt()改善程序的健壮性
查看>>
关于对象赋值及返回临时对象过程中的构造与析构
查看>>
VS 2005 CRT函数的安全性增强版本
查看>>
SQL 多表联合查询
查看>>
Visual Studio 2010:C++0x新特性
查看>>
drwtsn32.exe和adplus.vbs进行dump文件抓取
查看>>
cppcheck c++静态代码检查
查看>>
在C++中使用Lua
查看>>
一些socket的编程经验
查看>>
socket编程中select的使用
查看>>
GitHub 万星推荐:黑客成长技术清单
查看>>
可以在线C++编译的工具站点
查看>>
关于无人驾驶的过去、现在以及未来,看这篇文章就够了!
查看>>
所谓的进步和提升,就是完成认知升级
查看>>