#include "iostream.h"
struct node
{
char data;
node *next;
};
node *create();
node *search(node *head,char keyWord);
void insert(node * &head,char keyWord,char newdata);
void showList(node *head);
void Delete(node *&head,char keyWord);
int main()
{
node *head;
head=create();
// insert(head,'b','e');
Delete(head,'b');
showList(head);
return 0;
}
node * create()
{
node *head=NULL;//表头指针,一开始没有任何结点,所以为NULL
node *pEnd=head;//表为指针,一开始没有任何结点,所以指向表头
node *pS;//创建新结点时使用的指针
char temp;//用于存放从键盘输入的字符
cout <<"Please input a string end with '#':" <<endl;
do//循环至少运行一次
{
cin >>temp;
if (temp!='#')//如果输入的字符不是结尾符#,则建立新结点
{
pS=new node;//创建新结点
pS->data=temp;//新结点的数据为temp
pS->next=NULL;//新结点将成为表尾,所以next为NULL
if (head==NULL)//如果链表还没有任何结点存在
{
head=pS;//则表头指针指向这个新结点
}
else//否则
{
pEnd->next=pS;//把这个新结点连接在表尾
}
pEnd=pS;//这个新结点成为了新的表尾
}
}while (temp!='#');//一旦输入了结尾符,则跳出循环
return head;//返回表头指针
}
void showList(node *head)
{
node *pRead=head;//访问指针一开始指向表头
cout <<"The data of the link list are:" <<endl;
while (pRead!=NULL)//当访问指针存在时(即没有达到表尾之后)
{
cout <<pRead->data;//输出当前访问结点的数据
pRead=pRead->next;//访问指针向后移动
}
cout <<endl;
}
void insert(node * &head,char keyWord,char newdata)//keyWord是查找关键字符
{
node *newnode=new node;//新建结点
newnode->data=newdata;//newdata是新结点的数据
node *pGuard=search(head,keyWord);//pGuard是插入位置前的结点指针
if (head==NULL || pGuard==NULL)//如果链表没有结点或找不到关键字结点
{//则插入表头位置
newnode->next=head;//先连
head=newnode;//后断
}
else//否则
{//插入在pGuard之后
newnode->next=pGuard->next;//先连
pGuard->next=newnode;//后断
}
}
node * search(node *head,char keyWord)//返回结点的指针
{
node *pRead=head;
while (pRead!=NULL)//采用与遍历类似的方法,当访问指针没有到达表尾之后
{
if (pRead->data==keyWord)//如果当前结点的数据和查找的数据相符
{
return pRead;//则返回当前结点的指针
}
pRead=pRead->next;//数据不匹配,pRead指针向后移动,准备查找下一个结点
}
return NULL;//所有的结点都不匹配,返回NULL
}
void Delete(node * &head,char keyWord)//可能要操作表头指针,所以head是引用
{
if (head!=NULL)//如果链表没有结点,就直接输出提示
{
node *p;
node *pGuard=head;//初始化pGuard指针
if (head->data==keyWord)//如果头结点数据符合关键字
{
p=head;//头结点是待删除结点
head=head->next;//先连
delete p;//后断
cout <<"The deleted node is " <<keyWord <<endl;
return;//结束函数运行
}
else//否则
{
while (pGuard->next!=NULL)//当pGuard没有达到表尾
{
if (pGuard->next->data==keyWord)//如果pGuard后继结点数据符合关键字
{
p=pGuard->next;//pGuard后继结点是待删除结点
pGuard->next=p->next;//先连
delete p;//后断
cout <<"The deleted node is " <<keyWord <<endl;
return;//结束函数运行
}
pGuard=pGuard->next;//pGuard指针向后移动
}
}
}
cout <<"The keyword node is not found or the link list is empty!" <<endl;//输出提示信息
}
Please input a string end with '#':
Tomato#
The data of the link list are:
Tomato
这个程序的功能是把输入的字符串保存到链表中,然后把它输出。从程序中我们可以看出,create函数的主要工作有:
①做好表头表尾等指针的初始化。
②反复测试输入的数据是否有效,如果有效则新建结点,并做好该结点的赋值工作。将新建结点与原来的链表连接,如果原链表没有结点,则与表头连接。
③返回表头指针。
下图9.6.1给出了create函数创建链表的过程。
初始化
创建第一个结点
创建第二个结点
……
创建完成
(图9.6.1)
程序中showList函数的主要工作有: - 103 -
易学 C++
①初始化访问指针。
②如果访问指针不为空,则输出当前结点的数据,否则函数结束。
③访问指针向后移动,并重复第二项工作。
注意,虽然上述程序可以运行,但是它没有将内存释放,严格意义上来说,它是一个不完整的程序。
链表的查
delete 在函数中也会影响实参。
- 大小: 3.4 KB
- 大小: 5.1 KB
- 大小: 8.6 KB
分享到:
相关推荐
\创建链表,删除查找\创建链表,删除查找
设计一个程序,创建链表LA;LB,并用一个链表LC将两个链表链接起来,单调非递减.
创建链表插入删除创建链表插入删除创建链表插入删除
创建链表基本操作,c++中的链表的基本操作均有涉及,是初学者的最佳参考
带头结点尾插法创建链表 本文讲解如何在C++中使用尾插法创建链表,并显示链表。链表是一种常用的数据结构,它可以用于存储和管理大量数据。在本文中,我们将学习如何使用尾插法创建链表,并如何显示链表的内容。 ...
在这个“结构体与函数、创建链表课堂举例”中,我们将深入探讨这两个主题。 首先,我们来看“结构体”。在C/C++中,结构体是一种复合数据类型,它允许我们把不同类型的变量组合在一起,形成一个新的类型。例如,...
本篇文章将深入探讨单向链表的基本概念,包括其结构体定义、如何创建链表以及如何遍历链表。 首先,我们来理解链表的结构。在C语言中,单向链表通常用结构体来表示。结构体包含两个部分:数据域,用于存储实际的...
1. 创建链表:创建链表通常从空链表开始,通过不断添加节点来构建。在C++中,可以定义一个头节点,初始时头节点的指针域为NULL。随着新节点的添加,头节点的指针域将指向新的首节点。 2. 插入节点:在链表中插入...
在这个“创建链表3(2个工作指针)”的学习资源中,我们将深入探讨如何利用两个工作指针来构建和操作链表。 链表不同于数组,它不连续存储数据,而是通过节点间的指针链接。每个节点包含两部分:数据和指向下一个节点...
在C++编程中,读取文件并创建链表是一个常见的任务,这涉及到文件I/O操作以及数据结构的实现。在给定的标题“Q1077615.zip C++读文件创建链表问题”中,我们可以推断讨论的核心是用户在尝试从一个文件中读取数据,...
创建链表文件读取.cpp
C++创建链表、及链表数据查询--.cpp源代码
创建链表【分函数】.c
创建链表是一种常见的数据结构操作,它在计算机科学中扮演着重要角色,特别是在存储和处理大量数据时。链表不同于数组,因为它不连续存储元素,而是通过节点间的指针链接。这使得链表在插入和删除操作上具有优势,...
详细用c语言创建链表,通俗易懂链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用。链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以...
创建链表首先需要创建一个头节点,头节点通常不存储任何数据,仅用作链表的起始标志。接着,可以通过动态内存分配创建新的节点,并将新节点的指针域设置为指向现有的链表中的节点,或者在链表为空时,新节点成为头...
数据结构实训程序:创建链表,插入,删除,查询等。 数据结构实训程序:创建链表,插入,删除,查询等。
创建链表时,我们经常需要动态地分配内存来为每个节点分配空间。然而,通过指针参数申请动态内存是一个常见的错误点,这在给定的实例中得到了详细阐述。 首先,我们来看一下链表节点的定义: ```c typedef struct ...
- 创建链表时,我们首先初始化头节点`head`为`NULL`,然后逐个读取用户输入的学生信息,创建新节点并将其连接到链表中。 - 当所有学生信息输入完毕后,将链表写入磁盘文件。使用`fopen`函数以追加模式(`"ab+"`)...
# 题目:创建一个链表。