C++利用由结构类型chNode形成的链表来存储字符串
利用由结构类型chNode形成的“链表”来存储字符串(串中的每一个字符占用一个链表项,字符本身存放在链表项的c分量中,而使用链表项的next分量去“串接”后继项)。
struct chNode {
char c; 存放一个字符
chNode* next; “串接”后继项
};
并编制具有如下功能的函数,对此种不同链表中的字符串进行处理。
(1) void catStr (char* a, chNode* p);
将a字符串中的所有字符“串接”到以p指向其首的“链串”的后面(尾部)。
(2) void displayStr (chNode* p);
屏幕输出以p指向其首的“链串”中的所有字符(一个字符串)。
(3) void getStr (char *b, chNode* p);
将以p指向其首的“链串”中的所有字符(一个字符串)取出放入字符数组b之中。
点评:使用这种方式可以存放任意长度的字符串。但要对存储在上述这种链表结构中的字符串进行处理,总要涉及到对链表的所谓“遍历”过程(因为只有从链首“走到”链尾才能找出那一个字符串的所有各字符,才能对它们进行规定的处理)。
16.2概要设计:
本程设计思路: 就直接按照题目需求那样设计一个结果类型chNode形成“链表”。然后编写各类功能函数,用数据结构结构的知识来实现。
16.3 详细设计与编码:
见上传程序。
16.4 调试分析:
这题在实现的时候就是直接按照想的来写了,在运行的时候没有问题,但是在调试的时候却会出现问题,程序会关闭。看了很久愣是没有看出到底是哪里的问题,无奈,就这样,有空再看看。
程序执行的结果:
16.5 用户使用说明:
按照提示进行操作就可。
16.6 设计心得:
写程序不能理所当然。写程序并不是很难,难的是找错,往往会陷入个死局。感觉如果是能事先先做好各种需求设计什么的,会好很多。
#include<iostream.h>
#include "stdlib.h"
struct node{//节点的结构体
friend struct list;
private:
public:原文请找腾讯752018766优,文-论'文.网http://www.youerw.com
char data;
node* next;
node(const char &item,node* nextptr=NULL) {
data=item;
next=nextptr;
}
};
struct list{//链的结构体
private:
node* first;
node* last;
//生成新的结点
node* getnode(const char &item,node* nextptr=NULL){
node* newnode=new node(item,nextptr);
if(newnode==NULL){
cout<<"出错!没有结点生成"<<endl;
exit(1);
}
else
return newnode;
}
public:
list(){
first=NULL;
last=NULL;
}
void catStr (char* a, node* p);
void displayStr (node* p);
void getStr (char *b, node* p);
node* search(const char& name);
void showdata();
};
//把字符串a链接到以p结点为头结点的链表中去
void list::catStr(char* a,node* p){
if(p==NULL){
first=getnode(a[0]);
node* p=first;
int n=1;
while(a[n]!=NULL){
p->next=getnode(a[n]);
p=p->next;
n++;
}
}
else{
int n=0;
while(p->next!=NULL){
p=p->next;