串的块链存储c语言栈,小蚂蚁学习数据结构(18)——串的块链的代码实现

感觉上块链的代码实现比数组的代码实现要难一些,估计因为数组的实现书上有伪代码,而块链连伪代码都木有,不过归根到底还是水平不行……哭瞎……╥﹏╥...

/*

数据结构C语言版 串的块链存储表示和实现

*/

# include 

# include 

# include 

/* 链表元素结构体 */

typedef struct List

{

//数据域

char data;

//指针域

struct List * pNext;

}List, * PLIST;

/* 串结构体 */

typedef struct String

{

PLIST pHead, pTail;

int length;

}STRING, * PSTRING;

/* 函数前置声明 */

/* 初始化一个串 */

void InitString( PSTRING );

/* 为一个串赋值 */

bool StrAssign( PSTRING, char * );

/* 遍历这个块链串 */

void TravelerString( PSTRING );

/* 返回串的长度 */

int StrLength( PSTRING );

/* 拷贝一个串 */

bool StrCopy( PSTRING, PSTRING );

/* 拼接两个串常量编程一个块链 */

bool Concat( PSTRING, char *, char * );

/* 初始化这个串 */

void InitString( PSTRING str )

{

str -> pHead  = NULL;

str -> pTail  = NULL;

str -> length = 0;

}

/*

复制一个串常量

*/

bool StrAssign( PSTRING str, char * arr )

{

int i, j;

PLIST p, q;

//串常量的长度

for( i = 0; arr[i] != '\0'; ++i);

str -> length = i;

for( j = 0; j 

{

//如果j 等于 0,说明是首节点

if( 0 == j )

{

p = ( PLIST )malloc( sizeof( List ) );

if( NULL == p )

{

printf("动态内存分配失败\n");

return false;

}

p -> data = arr[j];

p -> pNext = NULL;

str -> pHead = p;

}

else

{

q = ( PLIST )malloc( sizeof( List ) );

if( NULL == q )

{

printf("动态内存分配失败\n");

return false;

}

q -> data = arr[j];

q -> pNext = NULL;

p -> pNext = q;

p = q;

}

}

str -> pTail = p;

return true;

}

/* 打印出这个串 */

void TravelerString( PSTRING str )

{

PLIST p = str -> pHead;

while( NULL != p )

{

printf( "%c ", p -> data );

p = p -> pNext;

}

printf("\n");

}

/* 返回串的长度 */

int StrLength( PSTRING str )

{

return str -> length;

}

/* 拷贝一个串的长度 */

bool StrCopy( PSTRING str, PSTRING str1 )

{

PLIST p, q, r;

r = str1 -> pHead;

str -> length = str1 -> length;

while( NULL != r )

{

if( r == str1 -> pHead )

{

p = str -> pHead = ( PLIST )malloc( sizeof( List ) );

p -> data = r -> data;

p -> pNext = NULL;

r = r -> pNext;

}

else

{

q =  ( PLIST )malloc( sizeof( List ) );

q -> data = r -> data;

q -> pNext = NULL;

p -> pNext = q;

p = q;

r = r -> pNext;

}

}

str -> pTail = p;

return true;

}

/* 拼接两个字符串常量 */

bool Concat( PSTRING str, char * s1, char * s2 )

{

STRING a1, a2;

InitString( &a1 );

InitString( &a2 );

StrAssign( &a1, s1 );

StrAssign( &a2, s2 );

str -> pHead = a1.pHead;

str -> pTail = a2.pTail;

a1.pTail -> pNext = a2.pHead;

return true;

}

int main( void )

{

//创建一个串

STRING str, str1, str2;

InitString( &str );//初始化这个串

InitString( &str1 );

InitString( &str2 );

printf("将字符串常量“abcde”赋值给str\n");

StrAssign( &str, "abcde" );

printf("打印出str的值:");

TravelerString( &str );

printf( "打印出串str的长度:%d\n", StrLength( &str ) );

//拷贝str 到 str1

printf("复制串str到str1,遍历str1:\n");

StrCopy( &str1, &str );

TravelerString( &str1 );

//将两个串常量,拼接成一个串块链

Concat( &str2, "hello", "world" );

printf("将“hello”“world”拼接成一个新的块链串:\n");

TravelerString( &str2 );

return 0;

}

/*

在VC++6.0中输出的结果是:

=============================

将字符串常量“abcde”赋值给str

打印出str的值:a b c d e

打印出串str的长度:5

复制串str到str1,遍历str1:

a b c d e

将“hello”“world”拼接成一个新的块链串:

h e l l o w o r l d

=============================

总结:

无非都是线性表,跟操作线性表的感觉一样一样的。

有时间多把线性结构、栈、队列那里再练练,考试的重点。

*/

扛不住了,我要吐了,不谢了,就这吧,估计考试也不会考这里的大题……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言sort函数排序二维数组,js 二维数组排序sort()函数

一、按数值排序var arr [[1, 2, 3], [7, 2, 3], [3, 2, 3]];arr.sort(function(x, y){return x[0] – y[0];});其实是数组依次将数组元素复制给x,y,比如首先将arr[0]赋给x,arr[1]赋给y,然后用x[0] – y[0],根据返回的值&#xff…

c 语言 abs 库函数,absread,abswirte - C 语言库函数手册

absread, abswirte功 能: 绝对磁盘扇区读、写数据用 法: int absread(int drive, intnsects, int sectno, void *buffer);int abswrite(int drive, int nsects, in tsectno,void *buffer);程序例:/* absread example */#include #include #include #include int main(void){int…

每天一个linux命令博客nano,11 个鲜为人知的 Linux 命令(1)

英文:Tecmint,编译:Linux中国linux.cn/article-2258-1.html如有好文章Linux命令行吸引了大多数Linux爱好者。一个正常的Linux用户一般掌握大约50-60个命令来处理每日的任务。Linux命令和它们的转换对于Linux用户、Shell脚本程序员和管理员来说…

谷歌发布最新版安卓Android,谷歌发布安卓 9 正式版,代号 Android Pie

爱搞机 8 月 7 日消息,据外媒报道,北京时间今日凌晨,谷歌开始向用户推送安卓 Android Pie 正式版,除了确定新系统的代号为 Pie(派)之外,谷歌还将原本的安卓 9.0 称作 Android 9 Pie,这与此前的官方命名有所…

c语言 1 %3c%3c -253,结构体嵌套 姓名前后怎么输出两次??

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/******************************************************************日期:2013-9-14*题目:结构体的嵌套*难度等级★★★*程序分析:*******************************************************************/#include void main() …

android 标题样式,Android定义各种样式的标题栏:requestWindowFeature()

最近在网上看到一篇介绍Android window的requestWindowFeature()的使用方法,共享出来大家学习学习requestWindowFeature(Window.FEATURE_LEFT_ICON);setContentView(R.layout.dialog_activity);getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, a…

m1笔记本android开发,Apple M1设备开发Android小tips

虽然m1来开发android是挺有优势的,苦于google目前还没有支持m1芯片的android studio版本(包括测试版) 截稿日期2021-5-14,所以我们当下可以选择idea2021,原生支持m1,而且编译速度运行效率更快(同时也会让你失去摸鱼时间)&#xff…

android天气预报实训程序清单,Android天气预报项目

1、项目效果图:2、主页面MainActivity代码如下:MainActivity.javapackage com.qianfeng.weather;import android.content.Intent;import android.graphics.drawable.AnimationDrawable;import android.os.Handler;import android.os.Message;import andr…

harmonyOS智慧屏,在鸿蒙HarmonyOS智慧屏上实现一款粗糙的计算器

在学习的路上我们不能只是停留在对理论知识的理解,还应该将理论和实战进行结合,这样才有利于我们能够更有深度的掌握知识,最终形成自己的知识体系结构。我们在实战的时候,不仅可以巩固我们的理论知识,还能够在实战中发…

imx6 android快速启动,android启动不起来(已解决)

我使用imx6dl,使用JB4.3.3-1.1.0版本,但在启动的时候最后停在了Freeing init memory: 232K,就没了动静,各位大侠帮忙分析一下吧:以下是log:U-Boot 2009.08 ( 1��月 08 2014 - 15:47:46)CPU: Freescale i.MX…

android系统语音合成,android 语音合成报错

发现了2个问题第一个貌似是复制离线的资源出错了(已经核对过读写等权限):12-19 19:54:49.739 32006-32159/com.zhanglf.youxuanz I/NonBlockSyntherizer: 初始化开始12-19 19:54:49.748 32006-32159/com.zhanglf.youxuanz W/System.err: java.io.FileNotFoundExcept…

华为公布4月升级鸿蒙,华为余承东:鸿蒙OS今年4月见,华为Mate X2首批升级

随着搭载鸿蒙OS的终端设备日益增多,鸿蒙系统何时应用于手机成为舆论关注的焦点。特别是在2020年12月华为发布鸿蒙OS 2.0手机开发者Beta版本之后,公众对手机上运行鸿蒙OS的期待值越来越高。余承东在发布会上表示,从今年4月开始,华为…

android酷狗缓存目录,酷狗缓存的歌曲在哪个文件夹_酷狗音乐缓存的歌曲在电脑哪个目录-win7之家...

酷狗是一款很流行的音乐播放软件,当我们在听歌曲的时候,默认会缓存到文件夹中,方便下次没有网络的时候可以继续听这首歌,有些用户想要知道酷狗缓存的歌曲在哪个文件夹,我们可以从主界面中进入即可找到,接下…

html内容点击按钮自动复制,HTML页面---复制按钮的使用(包含弹层)

先说一下我的整体方案:用到了clipboard插件,官方地址和github地址,也可以参考中文说明。clipboard插件实测:在PC端的浏览器(试了mac上的safari,chrome,firefox)可用,iOS 10.3上的safari可用,手机上的微信QQ…

html给文字添加阴影效果,如何设置样式之添加文字阴影、边框阴影或者添加自己的CSS...

以下的例子只是样式面板的使用案例之一,样式面板功能很强大,几乎能完成您的所有需求,详情参阅这里。边框的案例可以参阅这里。一、如何给文字添加阴影效果首先, 打开CSS工作面板请依次点击:右侧栏“样式面板”按钮(见第…

html5图片剪切板,JavaScript 网页端复制图片到剪切板

前端页面可能需要复制图片到剪切板的功能,这里使用JavaScript来实现这一功能,兼容大部分浏览器全部代码复制图片到剪切板复制图片var SelectText function (element) {var doc document;if (doc.body.createTextRange) {var range document.body.crea…

java中的html标签位置,Java 过滤所有html标签,复制文件到指定位置

public static String filterHtml(String string){String str string.replaceAll("", "").replaceAll("[a-zA-Z][1-9]?>", "");return str;}复制文件到指定位置public static boolean inPutStreamTofile(InputStream inStream, S…

湖北大学计算机科学与技术怎么样,湖北大学(专业学位)计算机技术考研难吗

考研真题资料优惠价原价选择很多考生在准备湖北大学(专业学位)计算机技术考研难吗?是考研报考的时候都会产生这样的疑问:这个专业的研究生好吗?适合我吗?对我以后的人生和职业会有帮助吗?考生在准备湖北大学(专业学位)…

计算机打开共享网络连接打印机共享打印机,网络共享打印机连接不上怎么办_电脑连不上共享打印机如何解决-win7之家...

通常为了方便多人可以一起共用一台打印机,都会在局域网络中将打印机共享,可是近日有不少用户却遇到网络共享打印机连接不上的情况,这该怎么办呢,确认打印机已经共享,并且电脑在同一个家庭组里,针对脑连不上…

html盒子居中的方式,CSS盒子居中三种方法

前言CSS盒子居中,我觉得是很有必要学习一下的。特别是第三种方法,奇淫技巧升级版,也是生产环境中非常常见的一种方法,不需要知道宽度,随着祖先元素的变化而变化!1.常规方法常规方法只需要给盒子设置宽高&am…