单链表的创建和销毁

合集下载

单链表的销毁递归算法

单链表的销毁递归算法

单链表的销毁递归算法
为了销毁一个单链表,可以使用递归算法来遍历链表,通过不断地删除节点来销毁链表。

下面是一个示例的单链表的销毁递归算法的伪代码:
```
destroyList(Node* node):
if node is null:
return
destroyList(node->next) // 递归调用销毁下一个节点
delete node // 删除当前节点
```
首先检查当前节点是否为空,如果为空则直接返回。

然后递归调用 destroyList 函数,传入当前节点的下一个节点。

这样会一直递归到链表的末尾节点。

当递归返回到链表的末尾节点后,开始删除节点。

最后递归的返回到链表的上一个节点,继续删除节点,直到链表的头节点被删除。

这样就达到了销毁链表的目的。

注意,在每次删除节点时,应该使用 delete 运算符来释放节点的内存空间。

下面是一个以 C++ 语言实现的示例代码:
```cpp
void destroyList(Node* node) {
if (node == nullptr) {
return;
}
destroyList(node->next);
delete node;
}
```
以上代码会销毁整个链表,释放链表节点的内存空间。

数据结构实验报告--单链表

数据结构实验报告--单链表

数据结构实验报告--单链表数据结构实验报告--单链表1.引言1.1 研究目的本实验旨在通过实践的方式,深入了解单链表的数据结构以及相关操作,提升对数据结构的理解和应用能力。

1.2 实验内容本实验主要包括以下几个方面的内容:●单链表的基本定义和实现●单链表的插入、删除、遍历操作●单链表的逆置操作●单链表的查找和修改操作2.理论基础2.1 单链表的定义单链表是一种常见的线性数据结构,它由一系列的节点组成,每个节点包含数据和指向下一个节点的指针。

2.2 单链表的基本操作①单链表的插入操作在单链表中,可以通过插入操作在指定位置插入一个新节点,该操作主要包括以下步骤:●创建一个新的节点,并为其赋值●将新节点的next指针指向插入位置的后一个节点●将插入位置的前一个节点的next指针指向新节点②单链表的删除操作在单链表中,可以通过删除操作删除指定位置的节点,该操作主要包括以下步骤:●将删除位置的前一个节点的next指针指向删除位置的后一个节点●释放删除节点的内存③单链表的遍历操作单链表的遍历操作主要是依次访问链表中的每一个节点,并执行相应的操作。

④单链表的逆置操作单链表的逆置操作可以将一个单链表中的节点顺序进行颠倒。

⑤单链表的查找操作在单链表中,可以通过查找操作找到指定值的节点。

⑥单链表的修改操作在单链表中,可以通过修改操作修改指定位置的节点的值。

3.实验过程3.1 实验环境本次实验使用C语言进行编程,需要先安装相应的编程环境,如gcc编译器。

3.2 实验步骤①单链表的创建和初始化首先创建一个空链表,并初始化链表的头指针。

②单链表的插入操作按照需求,在链表的指定位置插入一个新节点。

③单链表的删除操作按照需求,删除链表中的指定位置的节点。

④单链表的遍历操作依次访问链表中的每一个节点,并输出其值。

⑤单链表的逆置操作将单链表中的节点顺序进行逆置。

⑥单链表的查找操作按照需求,在链表中查找指定值的节点。

3.2.7 单链表的修改操作按照需求,修改链表中指定位置的节点的值。

数据结构单链表实验报告

数据结构单链表实验报告

数据结构单链表实验报告实验目的:掌握单链表的基本操作,学会使用单链表实现各种算法。

实验内容:实现单链表的基本操作,包括创建、插入、删除、访问等。

利用单链表完成以下算法:- 单链表逆序- 查找单链表中的中间节点- 删除单链表中的倒数第K个节点- 合并两个有序单链表为一个有序单链表实验步骤:1. 创建单链表在创建单链表时,先定义一个结构体Node来表示链表中的节点,节点包括数据域和指针域,指针域指向下一个节点。

然后,用指针p指向链表的头节点,将头节点的指针域初始化为NULL。

2. 插入节点在单链表中插入节点的操作分为两种情况:- 在链表头插入节点- 在链表中间或尾部插入节点无论是哪种情况,先将新节点的指针域指向要插入的位置的下一个节点,再将要插入的位置的指针域指向新节点即可。

3. 删除节点删除链表节点的操作同样分为两种情况:- 删除头节点- 删除中间或尾部节点要删除头节点,先用一个指针将头节点指向的下一个节点保存起来,再将头节点释放掉。

要删除中间或尾部节点,先用一个指针指向要删除节点的前一个节点,然后将指向要删除节点的前一个节点的指针域指向要删除节点的下一个节点,最后将要删除的节点释放掉。

4. 单链表逆序单链表逆序可以使用三个指针来完成,分别为pre指针、cur指针和next指针。

首先将pre指针和cur指针指向NULL,然后循环遍历链表,将cur指针指向当前节点,将next指针指向当前节点的下一个节点,然后将当前节点的指针域指向pre指针,最后将pre指针和cur指针向前移动一个节点,继续进行循环。

5. 查找单链表中的中间节点查找单链表中的中间节点可以使用双指针法,将两个指针p1和p2都指向链表头,然后p1每次向前移动一个节点,而p2每次向前移动两个节点,当p2指向了链表尾部时,p1指向的节点即为中间节点。

6. 删除单链表中的倒数第K个节点删除单链表中的倒数第K个节点可以使用双指针法,在链表中定义两个指针p1和p2,p1指向链表头,p2指向第K个节点,然后p1和p2同时向前移动,直到p2指向链表尾部,此时p1指向的节点即为要删除的节点。

数据结构和C++程序设计_题库

数据结构和C++程序设计_题库

《数据结构》Part1一.选择1. 组成数据的基本单位是()A)数据项B)数据类型C)数据元素D)数据变量2.算法分析的目的是()A)找出数据结构的合理性B)研究算法的输入/输出关系C)分析算法的效率以求改进D)分析算法的易读性3.在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是()A)O(1) B)0(n) C)O(n^2) D)O(nlog2n)4.若线性表采用顺序存储结构,每个元素占用4个存储单元,第一个元素的存储地址为100,则第12个元素的存储地址是()A)112 B)144 C)148 D)4125.下面关于线性表的叙述中,错误的是()A)顺序表使用一维数组实现的线性表B)顺序表必须占用一片连续的存储单元.C)顺序表的空间利用率高于链表D)在单链表中,每个结点只有一个链域. 6.在需要经常查找结点的前驱与后继的情况下,使用()比较合适A)单链表B)双链表C)顺序表D)循环链表7.队列通常采用的两种存储结构是()A)顺序存储结构和链式存储结构B)散列方式和索引方式C)链表存储结构和线性存储结构D)线性存储结构和非线性存储结构8.在一个单链表中,若删除p所指结点的后继结点,则执行()A)p->next=p->next->next;B)p=p->next;p->nex=p->next->next;C)p->next=p->next;D)p=p->next->next;9.若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间A)单链表B)仅有头指针的单循环链表C)双链表D)仅有尾指针的单循环链表10.按二叉树的定义,具有三个结点的二元树共有()种形态。

A)3 B)4 C)5 D)611.任何一棵二叉树的叶结点在先序、中序和后序遍历序列中的相对次序()A)发生改变B)不发生改变C)不能确定D)以上都不对12.深度为5的二叉树至多有()个结点A)16 B)32 C)31 D)1013.在一棵度为3的树中,度为3的结点数为2个,度为2的结点数为1个,度为1的结点数为2个,那么度为0的结点数为()个。

数据结构上机操作实验报告

数据结构上机操作实验报告

实验一单链表的基本操作(必做)一、实验目的1.掌握单链表的存储、初始化、插入、删除等操作的程序实现。

2.加深对单链表基本概念,基本理论及相应算法的掌握与理解。

3.了解链表的处理方式,学习体会简单的单链表程序实现相关知识。

二、实验内容1.建立一个链表、设计链表的基本操作实现算法、输出一个链表表,调试并输出结果。

2.编写一个程序实现如下功能:让计算机产生出50个0~9之间的随机数并依次保存到单链表中;输出遍历单链表;从单链表中删除与给定值相等的所有结点;输出遍历单链表;输出单链表长度,调试并输出结果。

三、实验步骤1.定义一个链表结构体。

2.利用插入功能插入一个结点。

3.利用删除功能删除一个结点。

四、程序运行测试1.利用插入功能插入一个结点。

2.利用删除功能删除一个结点。

五、实验报告要求1.绘制链表操作实现的流程图。

2.详细给出程序运行测试结果(包括测试数据和测试结果)。

3.选试验步骤2-3中的任意一个,给出程序的详细注释。

4.参考程序中某一部分功能的改进(选做)5.实验心得与体会6.附录,实验用源程序六、参考源代码#include <iostream.h>#include <malloc.h>typedef struct LNode{int data;struct LNode *next;}Lnode, *LinkList;//假设下面的单链表均为带头结点。

void CreatLinkList(LinkList &L,int j){//建立一个单链表L,数据为整数,数据由键盘随机输入。

LinkList p,q;L=(LinkList )malloc(sizeof(Lnode));L->next=NULL;q=L;cout<<"在单链表内输入整数:"<<endl;for(int i=0;i<j;i++) p=(LinkList)malloc(sizeof(Lnode)); cin>>p->data;p->next=q->next;q->next=p;q=p; }int PrintLinkList(LinkList &L){//输出单链表L的数据元素LinkList p;p=L->next;if(L->next==NULL){cout<<"链表没有元素!"<<endl;return 0;}cout<<"单链表的数据元素为:";while(p){cout<<p->data<<" ";p=p->next;}cout<<endl;return 1;}void LinkListLengh(LinkList &L){//计算单链表L的数据元素个数。

单链表基本操作的实现

单链表基本操作的实现

单链表基本操作的实现单链表是一种常见的数据结构,它由多个节点组合而成,每个节点包含一个数据元素和一个指向下一个节点的指针。

通过指针,我们可以方便地在单链表中进行插入、删除和遍历等操作。

以下是关于单链表基本操作的实现。

1. 单链表的创建单链表的创建需要定义一个空的头结点,它的作用是方便在链表的头部进行添加和删除节点操作。

一个空的头节点可以在链表初始化的过程中进行创建。

```typedef struct Node{int data;struct Node *next;}Node;Node *createList(){Node *head = (Node*)malloc(sizeof(Node)); //创建空的头节点head->next = NULL;return head; //返回头节点的地址}```2. 单链表的插入单链表的插入可以分为在链表头部插入、在链表尾部插入和在链表中间插入三种情况。

a. 在链表头部插入节点:```void insertAtHead(Node *head, int data){Node *node = (Node*)malloc(sizeof(Node));node->data = data;node->next = head->next;head->next = node;}```b. 在链表尾部插入节点:```void insertAtTail(Node *head, int data){Node *node = (Node*)malloc(sizeof(Node));node->data = data;node->next = NULL;Node *p = head;while(p->next != NULL){p = p->next;}p->next = node;}```c. 在链表中间插入节点:```void insertAtMid(Node *head, int data, int pos){ Node *node = (Node*)malloc(sizeof(Node)); node->data = data;node->next = NULL;Node *p = head;int count = 0;while(p->next != NULL && count < pos-1){ p = p->next;count++;}if(count == pos-1){node->next = p->next;p->next = node;}else{printf("插入位置错误!");}}```3. 单链表的删除单链表的删除可以分为在链表头部删除、在链表尾部删除和在链表中间删除三种情况。

链队列的基本操作

链队列的基本操作

链队列的基本操作
链队列是一种基于链表实现的队列,它具有链表的灵活性和队列的先进先出的特点。

链队列的基本操作包括初始化、入队、出队、判空和销毁等。

1. 初始化
链队列的初始化操作是创建一个空的链表作为队列的存储结构。

具体实现可以通过创建一个头结点来实现,头结点不存储任何数据,只是用来方便操作链表。

2. 入队
链队列的入队操作是在队列尾部插入一个新元素。

具体实现可以通过创建一个新的结点来实现,将新结点插入到队列尾部,并更新队列尾指针。

3. 出队
链队列的出队操作是从队列头部删除一个元素。

具体实现可以通过删除队列头部结点来实现,并更新队列头指针。

4. 判空
链队列的判空操作是判断队列是否为空。

具体实现可以通过判断队列头指针和队列尾指针是否相等来实现。

5. 销毁
链队列的销毁操作是释放队列占用的内存空间。

具体实现可以通过遍历整个链表,释放每个结点的内存空间来实现。

综上所述,链队列的基本操作包括初始化、入队、出队、判空和销毁等。

链队列的实现相对简单,但需要注意的是,在进行入队和出队操作时,需要更新队列头指针和队列尾指针,以保证队列的正确性。

同时,在进行销毁操作时,需要遍历整个链表,释放每个结点的内存空间,以避免内存泄漏的问题。

数据结构单链表实验报告

数据结构单链表实验报告

数据结构单链表实验报告一、实验目的1、深入理解单链表的数据结构及其基本操作。

2、掌握单链表的创建、插入、删除、查找等操作的实现方法。

3、通过实际编程,提高对数据结构和算法的理解和应用能力。

二、实验环境1、操作系统:Windows 102、编程语言:C 语言3、开发工具:Visual Studio 2019三、实验原理单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据域和指针域。

指针域用于指向下一个节点,从而形成链表的链式结构。

单链表的基本操作包括:1、创建链表:通过动态分配内存创建链表的头节点,并初始化链表为空。

2、插入节点:可以在链表的头部、尾部或指定位置插入新的节点。

3、删除节点:根据给定的条件删除链表中的节点。

4、查找节点:在链表中查找满足特定条件的节点。

四、实验内容(一)单链表的创建```cinclude <stdioh>include <stdlibh>//定义链表节点结构体typedef struct Node {int data;struct Node next;} Node;//创建单链表Node createList(){Node head =(Node)malloc(sizeof(Node));if (head == NULL) {printf("内存分配失败!\n");return NULL;}head>data = 0;head>next = NULL;return head;}int main(){Node list = createList();//后续操作return 0;}```在创建单链表时,首先为头节点分配内存空间。

若内存分配失败,则提示错误信息并返回`NULL`。

成功分配内存后,初始化头节点的数据域和指针域。

(二)单链表的插入操作插入操作分为三种情况:头部插入、尾部插入和指定位置插入。

1、头部插入```cvoid insertAtHead(Node head, int data) {Node newNode =(Node)malloc(sizeof(Node));if (newNode == NULL) {printf("内存分配失败!\n");return;}newNode>data = data;newNode>next = head>next;head>next = newNode;}```头部插入时,创建新节点,将新节点的数据域赋值,并将其指针域指向原头节点的下一个节点,然后更新头节点的指针域指向新节点。

pta 单链表基本操作

pta 单链表基本操作

pta 单链表基本操作
单链表是一种常见的数据结构,由一个个节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。

基本操作包括以下几种:
1. 创建链表:创建一个空链表,即创建一个头节点。

2. 插入节点:在链表的任意位置插入一个节点。

- 头部插入:将新节点作为新的头节点,其指针指向原头节点。

- 中间插入:将新节点插入到指定位置的节点之前,其指针指向指定位置的节点。

- 尾部插入:找到链表尾部节点,将新节点插到尾部节点的后面。

3. 删除节点:在链表中删除指定节点。

- 头部删除:将头节点删除,将头节点的下一个节点作为新的头节点。

- 中间删除:找到指定节点的前驱节点,将前驱节点的指针指向指定节点的后继节点。

- 尾部删除:找到尾部节点的前驱节点,将前驱节点的指针设为NULL。

4. 查找节点:在链表中查找指定数据的节点。

- 遍历链表,逐个比较节点的数据元素,直到找到指定数据或遍历到末尾节点。

5. 修改节点:在链表中修改指定节点的数据。

- 遍历链表,找到指定节点,修改其数据元素。

6. 遍历链表:按顺序遍历链表中的所有节点,进行相应操作。

这些是单链表的基本操作,可以根据需求进行组合和扩展。

单链表的建立、插入和删除

单链表的建立、插入和删除

单链表的建立、插入和删除单链表的建立插入删除#include<stdio.h>#include<stdlib.h>/*线性表*/struct TLink {int data;struct TLink * next;};/*end struct TLink*//*生成新元素*/struct TLink * new_item(int number){struct TLink * r = 0;r = (struct TLink *)malloc(sizeof(struct TLink));r->data = number;r->next = 0;return r;}/*end new_item*//*在线性表中查询数据*/struct TLink * lookup(struct TLink * root, int number) {struct TLink * h = root;while(h) {if (h->data == number) return h;h = h->next ;}/*end lookup*/return 0;}/*在线性表中追加一个数据*/void append(struct TLink * * root, int number){struct TLink * r = 0, * n = 0;if (!root) return ;/*不记录重复元素*/if (lookup(*root, number)) return;/*如果表为空则新建表*/r = *root;if (!r) {*root = new_item(number);return ;}/*end if*//*为保证为有序线性表,如果数据比表头还小则作为表头*/ if (number < r->data ) {n = new_item(number);n->next = r;*root = n;return ;}/*end if*//*在有序线性表中查找位置插入元素*/while(r) {n = r->next ;/*如果已经是表尾则直接追加*/if (!n) {n = new_item(number);r->next = n;return ;}/*end if*//*在中央某处插入*/if (number < n->data ) {r->next = new_item(number);r->next->next = n;return ;}/*end if*/r = n;}/*end while*/}/*end append*//*打印有序线性表*/void print(struct TLink * root){struct TLink * r = root;printf("【");while(r) {printf("%d ", r->data );r = r->next ;}/*end while*/printf("\b】\n");}/*end print*//*将有序线性表h1合并至有序线性表h0,并销毁线性表h1*/ void merge(struct TLink ** h0, struct TLink ** h1){struct TLink * h = 0, * k = 0;if (!h0 || !h1) return ;h = *h1;while(h) {append(h0, h->data );k = h;h = h->next ;free(k);}/*end h*/h1 = 0;}int main(void){int i = 0; struct TLink * x=0, *y = 0;int a[] = {8,4,3,9,5,1};int b[] = {7,2,1,5,6,0};printf("原数据为:\n数组A:【");for(i = 0; i < 6; i++) {printf("%d ", a[i]);append(&x, a[i]);}/*next*/printf("\b】\n数组B:【");for(i = 0; i < 6; i++) {printf("%d ", b[i]);append(&y, b[i]);}/*next*/printf("\b】\n转换为有序线性表\nA:");print(x);printf("B:");print(y);printf("AB合并后为:");merge(&x, &y);print(x);return 0;}。

单链表插入和删除节点的代码

单链表插入和删除节点的代码

单链表插入和删除节点的代码摘要:1.单链表插入节点2.单链表删除节点3.代码实现与解析正文:在计算机科学中,链表是一种常见的数据结构。

链表分为单链表和双链表。

本文将介绍单链表的插入和删除节点的操作,以及相应的代码实现。

一、单链表插入节点单链表插入节点分为三种情况:1.插入到头部2.插入到尾部3.插入到指定位置以下代码实现是将节点插入到尾部:```pythonclass ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextdef insert_at_tail(head, val):new_node = ListNode(val)return new_nodecur = headwhile cur.next:cur = cur.nextcur.next = new_nodereturn head```二、单链表删除节点单链表删除节点也分为三种情况:1.删除头部节点2.删除尾部节点3.删除指定节点以下代码实现是删除尾部节点:```pythondef delete_at_tail(head):if not head or not head.next:return headcur = headwhile cur.next.next:cur = cur.nextcur.next = cur.next.next```三、代码实现与解析以下是完整的单链表插入和删除节点的代码实现:```pythonclass ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextdef insert_at_tail(head, val):new_node = ListNode(val)if not head:return new_nodecur = headwhile cur.next:cur = cur.nextcur.next = new_nodereturn headdef delete_at_tail(head):if not head or not head.next:return headcur = headwhile cur.next.next:cur = cur.nextcur.next = cur.next.nextreturn head```通过以上代码,我们可以实现单链表的插入和删除操作。

数据结构实验报告-单链表

数据结构实验报告-单链表

2016级数据结构实验报告实验名称:实验一线性表——题目1学生姓名:李文超班级:2015661131班内序号:15学号:2015522147日期:2016年11月13日1.实验要求实验目的:根据线性表的抽象数据类型的定义,选择下面任一种链式结构实现线性表,并完成线性表的基本功能。

线性表存储结构(五选一):1、带头结点的单链表2、不带头结点的单链表3、循环链表4、双链表5、静态链表线性表的基本功能:1、构造:使用头插法、尾插法两种方法2、插入:要求建立的链表按照关键字从小到大有序3、删除4、查找5、获取链表长度6、销毁7、其他:可自行定义编写测试main()函数测试线性表的正确性。

2.程序分析2.1 存储结构单链表的存储:(1)链表用一组任意的存储单元来存放线性表的结点。

这组存储单元既可以是连续的,也可以是不连续的,甚至零散地分布在内存的某些位置。

(2)链表中结点的逻辑次序和物理次序不一定相同。

为了能正确表示结点间的逻辑关系,在存储每个元素值的同时,还要存储该元素的直接后继元素的位置信息,这个信息称为指针或链。

结点结构┌──┬──┐ data 域---存放结点值的数据域│data │next │ next 域---存放结点的直接后继的地址的指针域└──┴──┘单链表在内存中的存储示意地址 内存单元1000H头指针 1020H1080H10C0H2.2 关键算法分析1、关键算法:(1)头插法自然语言描述:a:在堆中建立新结点b:将a[i]写入到新结点的数据域c:修改新结点的指针域d:修改头结点的指针域。

将新结点加入链表中伪代码描述a:Node <T> * s=new Node <T>b:s->data=a[i]c:s->next=front->next;d:front->next=s(2)尾插法自然语言描述:a:在堆中建立新结点:b:将a[i]写入到新结点的数据域:c:将新结点加入到链表中d:修改修改尾指针伪代码描述a:Node <T> * s=new Node <T>b:s->data=a[i]c:r->next=s;d:r=s(3)遍历打印函数自然语言描述:a:判断该链表是否为空链表,如果是,报错b:如果不是空链表,新建立一个temp指针c:将temp指针指向头结点d:打印temp指针的data域e:逐个往后移动temp指针,直到temp指针的指向的指针的next域为空伪代码描述a: If front->next==NULL①Throw ”an empty list ”②Node<T>* temp=front->next;b:while(temp->next)c:cout<<temp->data<<" ";d:temp=temp->next;(4) 获取链表长度函数自然语言描述:a:判断该链表是否为空链表,如果是,输出长度0b:如果不是空链表,新建立一个temp指针,初始化整形数n为0c:将temp指针指向头结点d:判断temp指针指向的结点的next域是否为空,如果不是,n加一,否则return ne: 使temp指针逐个后移,重复d操作,直到temp指针指向的结点的next域为0,返回n伪代码描述a:if ront->next==NULLb:Node<T>* temp=front->next;c:while(temp->next)d:temp=temp->next;(5)析构/删除函数自然语言描述:a:新建立一个指针,指向头结点b:判断要释放的结点是否存在,c:暂时保存要释放的结点d:移动a中建立的指针e:释放要释放的指针伪代码描述a:Node <T> * p=frontb:while(p)c:front=pd:p=p->nexte:delete front(6)按位查找函数自然语言描述:a:初始化工作指针p和计数器j,p指向第一个结点,j=1b:循环以下操作,直到p为空或者j等于1①:p指向下一个结点②:j加1c:若p为空,说明第i个元素不存在,抛出异常d:否则,说明p指向的元素就是所查找的元素,返回元素地址伪代码描述a:Node <T> * p=front->next;j=1;b:while(p&&j!=1)①:p=p->next②:j++c:if(!p) throw ”error”d:return p(7)按位查找函数自然语言描述:a:初始化工作指针p和计数器j,p指向第一个结点,j=1b:循环以下操作,找到这个元素或者p指向最后一个结点①:判断p指向的结点是不是要查找的值,如果是,返回j,否则p指向下一个结点,并且j的值加一c:如果找到最后一个结点还没有找到要查找的元素,返回查找失败信息伪代码描述a:Node <T> * p=front->next;j=1;b:while(p)①: if(p->next==x) return jp=p->nextj++c:return “error”(8)插入函数自然语言描述:a:在堆中建立新结点b:将要插入的结点的数据写入到新结点的数据域c:修改新结点的指针域d:修改前一个指针的指针域,使其指向新插入的结点的位置伪代码描述a:Node <T> * s=new Node <T>;b:s-data=p->datac:s->next=p->nextd:p->next=se:p->data=x(9)删除函数自然语言描述:a:从第一个结点开始,查找要删除的位数i前一个位置i-1的结点b:设q指向第i个元素c:将q元素从链表中删除d:保存q元素的数据e:释放q元素伪代码描述a:q=p->nextb:p->next=q->nextc:x=q->datad:delete q2、代码详细分析(插入):(1)从第一个结点开始,查找节点,使它的数据比x大,设p指向该结点:while (x>p->data) { p=p->next;}(2)新建一个节点s,把p的数据赋给s:s->data=p->data;(3)把s加到p后面:s->next=p->next; p->next=s;(4)p节点的数据用x替换:p->data=x;示意图如图所示xp->datas3、关键算法的时间复杂度:O(1)3.程序运行结果1. 流程图:2、结果截图3.测试结论:可以正确的对链表进行插入,删除,取长度,输出操作。

单链表的建立、增加元素、删除元素、查找元素算法

单链表的建立、增加元素、删除元素、查找元素算法

单链表的建立、增加元素、删除元素、查找元素算法
单链表是一种常用的数据结构,由一个个节点构成,每个节点包含一个数据域和一个指向下一个节点的指针。

本文将介绍单链表的建立、增加元素、删除元素、查找元素算法。

一、单链表的建立
单链表的建立需要创建一个头结点,它不存储数据,只有一个指针域指向第一个节点。

接下来,我们用一个循环语句不断读入数据,创建新节点并将其插入到链表中。

二、单链表的增加元素
单链表的增加元素有两种情况,一种是在链表头插入新节点,另一种是在链表尾插入新节点。

在头部插入新节点时,需要先创建新节点,将它的指针域指向原来的头结点,再让头结点指向新节点;在尾部插入新节点时,需要先遍历整个链表找到最后一个节点,再将新节点插入到最后一个节点的后面。

三、单链表的删除元素
单链表的删除元素也有两种情况,一种是删除链表头的节点,另一种是删除链表中指定位置的节点。

在删除头结点时,需要先找到头结点的下一个节点,将其指针域赋给头结点,然后释放原来的头结点;在删除指定位置的节点时,需要先找到该节点的前一个节点,将前一个节点的指针域指向该节点的下一个节点,然后释放要删除的节点。

四、单链表的查找元素
单链表的查找元素有两种情况,一种是查找指定位置的节点,另
一种是查找指定数据域的节点。

在查找指定位置的节点时,需要遍历整个链表找到该位置的节点;在查找指定数据域的节点时,需要遍历整个链表找到数据域与目标值相等的节点。

单链表的基本操作代码

单链表的基本操作代码

单链表的基本操作代码单链表是一种常用的数据结构,它具有优秀的插入和删除性能,在数据存储和处理方面具有广泛的应用。

单链表的基本操作包含创建链表、插入节点、删除节点、查找节点等,下面是单链表的基本操作代码:1. 定义单链表结构体:typedef struct ListNode {int val;struct ListNode *next;} ListNode;2. 创建单链表:ListNode *createList(int arr[], int n) {ListNode *head = NULL, *tail = NULL, *p = NULL;for(int i = 0; i < n; i++) {p = (ListNode *)malloc(sizeof(ListNode));p->val = arr[i];p->next = NULL;if(head == NULL) {head = tail = p;} else {tail->next = p;tail = p;}}return head;}3. 插入节点:void insertNode(ListNode **head, int val, int pos) {ListNode *p = (ListNode *)malloc(sizeof(ListNode)); p->val = val;p->next = NULL;if(*head == NULL) {if(pos != 0) {printf("Invalid position\n");return;} else {*head = p;return;}}if(pos == 0) {p->next = *head;*head = p;} else {int i = 0;ListNode *q = *head;while(q != NULL && i < pos - 1) {q = q->next;i++;}if(q == NULL || i != pos - 1) {printf("Invalid position\n");return;}p->next = q->next;q->next = p;}}4. 删除节点:void deleteNode(ListNode **head, int pos) {if(*head == NULL) {printf("List is empty\n");return;}if(pos == 0) {ListNode *p = *head;*head = (*head)->next;free(p);} else {int i = 0;ListNode *p = *head, *q = NULL; while(p != NULL && i < pos) { q = p;p = p->next;i++;}if(p == NULL || i != pos) {printf("Invalid position\n");return;}q->next = p->next;free(p);}}5. 查找节点:ListNode *findNode(ListNode *head, int val) {ListNode *p = head;while(p != NULL) {if(p->val == val) {return p;}p = p->next;}return NULL;}单链表的基本操作是数据结构中最基础的部分,掌握好这些代码对于往后的学习和应用都会有很大的帮助。

单链表的创建与删除

单链表的创建与删除

单链表的创建与删除对于各种数据结构,⽐如set,map,⼆叉树等等,现在还处于很混乱的状态。

想通过《剑指offer》以及⾃⼰的亲⼿编写各种数据结构的实现与操作来熟练掌握,还是跟着此书的节奏⾛。

⽬标:在半个⽉内熟练!⾸先,单链表的添加元素和删除元素,如下://单链表的添加与删除元素操作//1、单链表中将元素添加⾄链表尾部(也可⽤于创建链表)//思路:1、定义节点;2、由前到后遍历后插⼊到尾部,改变尾指针;// 3、特殊情况:单链表为空,此时添加元素后会改动头指针,⽽⾮尾指针struct ListNode{int m_Value;ListNode* m_pNext;}void AddToListTail(ListNode** pHead, int value){//涉及指针时,先判断⾮空if(pHead == NULL)return;//创建新节点ListNode* pNew = new ListNode;pNew->m_Value = value;pNew->m_pNext = NULL;//分空、⾮空链表if(*pHead == NULL)*pHead = pNew;else{//头结点指针不能动ListNode* pNode = *pHead;while(pNode->m_pNext != NULL)pNode = pNode->m_pNext;pNode->m_pNext = pNew;}}//2、单链表中将=value的第⼀个元素删除//思路:1、遍历链表,找到后删除;2、特殊情况:若头指针既是,则因为⽆前驱,所以修改头指针;// 3、删除时需要前驱指针void RemoveNode(ListNode** pHead, int value){//涉及指针,判空if(pHead == NULL || *pHead == NULL)return;//头结点既是ListNode* pToBeDeleted = NULL;if((*pHead)->m_Value == value){pToBeDeleted = *pHead;*pHead = (*pHead)->m_pNext;}else//遍历链表,找到后删除,设置了前驱{ListNode* PrepNode = *pHead;ListNode* pNode = (*pHead)->m_pNext;while(pNode != NULL && pNode->m_Value != value){PrepNode = pNode;pNode = pNode->m_pNext;}if(pNode != NULL && pNode->m_Value == value){pToBeDeleted = pNode;PrepNode->m_pNext = pNode->m_pNext;}}//删除if(pToBeDeleted != NULL){delete pToBeDeleted;pToBeDeleted = NULL; //pToBeDeleted = NULL;重要}}关于删除操作,为避免开辟前驱指针变量以及对应的赋值操作,可按作者的提⽰写成如下://3、删除元素的另⼀种写法,效率更⾼void RemoveNode(ListNode** pHead, int value){//涉及指针,判空if(pHead == NULL || *pHead == NULL)return;//头结点既是ListNode* pToBeDeleted = NULL;if((*pHead)->m_Value == value){pToBeDeleted = *pHead;*pHead = (*pHead)->m_pNext;}else//遍历链表,找到后删除,未设置前驱{ListNode* pNode = *pHead; //相对应于⼆级指针,使⽤-> ->while(pNode->m_pNext != NULL && pNode->m_pNext->m_Value != value)pNode = pNode->m_pNext;if(pNode->m_pNext != NULL && pNode->m_pNext->m_Value == value){pToBeDeleted = pNode->m_pNext;pNode->m_pNext = pNode->m_pNext->m_pNext;}}//删除if(pToBeDeleted != NULL){delete pToBeDeleted;pToBeDeleted = NULL; //pToBeDeleted = NULL;重要}}。

数据结构C语言实现----销毁链表

数据结构C语言实现----销毁链表

数据结构C语⾔实现----销毁链表1.⾸先,将*list(头指针)赋值给p,这样p也指向链表的第⼀个结点,成为链表的表头2.然后判断只要p不为空,就将p指向下⼀个的指针赋值给q,再释放掉p3.之后再将q赋值给p,⽤来找到下⼀轮释放掉的结点的下⼀个结点代码如下:#include<stdio.h>#include<stdlib.h>typedef struct Node{char date;struct Node *next;}Node , *LinkList;//创建链表LinkList creat_linklist(int n){LinkList New_node,Tail_node;LinkList Head_node = NULL;char c;for (size_t i = 0; i < n; i++){printf("请输⼊在第%d个结点存⼊的数据:",i+1);scanf("%c",&c);fflush(stdin);New_node = (LinkList)malloc( sizeof(Node) );New_node->date = c;New_node->next = NULL;if (Head_node == NULL){Head_node = New_node;}else{Tail_node->next = New_node;}Tail_node = New_node;}return Head_node;}//销毁链表void destoryLinkList(LinkList *List){LinkList p,q;p = *List;while (p){q = p->next;free(p);p = q;}*List = NULL;}int main(){int n;char c;LinkList List , List2;//List⽤于第⼀次打印单链表,List2⽤于第⼆次打印单链表printf("请输⼊结点个数:");scanf("%d",&n);fflush(stdin);List = creat_linklist(n);List2 = List;//复制⼀遍链表,第⼀次打印链表后链表后头指针会直接指向NULL,导致第⼆次打印失败printf("打印单链表:");while ( List != NULL ){printf("%c" , List->date);List = List->next;}putchar('\n');printf("即将销毁链表,请按任意键确认!");getchar();destoryLinkList(&List2);if (List2 == NULL){printf("链表已被销毁!");}else{while ( List2 != NULL ){printf("%c" , List2->date); List2 = List2->next;}}return 0;}运⾏结果:。

单链表的 基本操作

单链表的 基本操作

单向链表单向链表的基本操作,创建一个由6个节点组成的单向链表,显示链表中每个节点的数据,并且做增加、删除、查找节点以及计算单链表的长度等处理。

➢需求分析:1.功能(1)用尾插法创建一带头结点的由6个节点组成的单向链表:从键盘读入一组整数,作为单链表中的元素,输入完第6个结点后结束;将创建好的单链表元素依次输出到屏幕上。

(2)显示链表中每个节点的数据(3)从键盘输入一个数,查找在以上创建的单链表中是否存在该数;如果存在,显示它的位置,即第几个元素;如果不存在,给出相应提示如“No found node!”。

(4)在上述的单链表中的指定位置插入指定数据,并输出单链表中所有数据.(5)删除上述单链表中指定位置的结点,并输出单链表中所有数据.(6)求单链表的长度并输出。

2.输入要求先输入单链表中结点个数n,再输入单链表中所有数据,在单链表中需查找的数据,需插入的数据元素的位置、值,要删除的数据元素的位置。

3。

测试数据单链表中所有数据:12,23,56,21,8,10在单链表中需查找的数据:56;24插入的数据元素的位置、值:1,28;7,28;0,28要删除的数据元素的位置:6➢概要设计:1.算法思想:由于在操作过程中要进行插入、删除等操作,为运算方便,选用带头结点的单链表作数据元素的存储结构。

对每个数据元素,由一个数据域和一个指针域组成,数据域放输入的数据值,指针域指向下一个结点。

2.数据结构:单链表结点类型:typedef struct Liistnode {int data;struct Listnode *next;} NODE;3.模块划分:a)用尾插法建立带头结点的单链表*CreateList函数;b)显示链表中每个结点的数据PrintList函数;c)从键盘输入一个数,查找单链表中是否存在该数FoundList函数;d)在单链表中指定位置插入指定数据并输出单链表中所有数据InsertList函数;e)删除单链表中指定位置的结点并输出单链表中所有数据DeleteList函数;f)计算单链表的长度并在屏幕上输出LengthList函数;g)主函数main(),功能是给出测试数据值,建立测试数据值的带头结点的单链表,调用PrintList函数、FoundList函数、InsertList函数、DeleteList函数、LengthList函数实现问题要求.四、实验要求1.用C完成算法设计和程序设计并上机调试通过。

单链表:创建、判空表、计算长度、销毁链表、清空链表、取第i个位置的值、单链表的查找(返回地。。。

单链表:创建、判空表、计算长度、销毁链表、清空链表、取第i个位置的值、单链表的查找(返回地。。。

单链表:创建、判空表、计算长度、销毁链表、清空链表、取第i个位置的值、单链表的查找(返回地。

当链表的每个结点只包含⼀个指针域时,我们称此链表为单链表。

关于单链表的存取,有时候我们在单链表的第⼀个结点(有效元素)之前附设⼀个结点,称之为;指向头结点的指针,称之为头指针;对单链表的存取必须从头指针开始进⾏,由于单链表的最后⼀个数据元素没有直接后继,则指针为NULL。

对于头结点,数据域可以不存储任何信息,也可存储如链表长度等附加信息。

下⾯是带头结点的单链表与空表的⽐较图。

头指针与头结点不同,头结点即第⼀个结点,是指向第⼀个结点的指针。

链表中可以没有头结点,但不能没有头指针。

关于头指针:在线性表的链式存储结构中,头指针是指链表指向第⼀个结点的指针,若链表有头结点,则头指针就是指向链表头结点的指针。

头指针具有标识作⽤,故常⽤头指针冠以链表的名字。

⽆论链表是否为空,头指针均不为空。

头指针是链表的必要元素。

关于头结点:头结点是为了操作的统⼀与⽅便⽽设⽴的,放在第⼀个元素结点之前,其数据域⼀般⽆意义(当然有些情况下也可存放链表的长度、⽤做监视哨等等)。

有了头结点后,对在第⼀个元素结点前插⼊结点和删除第⼀个结点,其操作与对其它结点的操作统⼀了。

⾸元结点也就是第⼀个元素的结点,它是头结点后边的第⼀个结点。

头结点不是链表所必需的。

头插法建⽴单链表:尾插法建⽴单链表:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include "iostream"using namespace std;#define ListSize 10//单链表的创建typedef struct LNode {int data;//数据域struct LNode *next;//链接域}LNode,*Linklist;//单链表的初始化bool InitList(Linklist &L){L = new LNode;//创建⼀个新的结点作为头结点,⽤头指针L指向头结点 L->next = NULL;//让头结点的指针域为空return true;}//判断单链表是否为空表:指针域那边为空bool ListEmpty(Linklist L){if (L->next)return false;elsereturn true;}//销毁单链表---不保留头结点bool DestroyList(Linklist &L){LNode *p;while (L){p = L;L = L->next;delete p;}return true;}//清空单链表---保留头指针和头结点,头结点的指针域要置为空bool DeleteList(Linklist &L){LNode *p, *q;p = L->next;while (p){q = p->next;delete p;p = q;}L->next = NULL;return true;}//求单链表的表长int ListLength(Linklist L){int i = 0;LNode *p;p = L->next;while (p){p = p->next;i++;}return i;}//取第i个元素的值bool GetElem(Linklist L, int i, int &e){LNode *p;int j = 1;while (p && j<i){p = p->next;j++;}//查找到最后的情况以及i可能为负数的情况if (!p || j > i)return false;e = p->data;return true;}//单链表的查找---查找某个元素值,返回该元素的地址LNode *LocateElem(Linklist L, int e){LNode *p;p = L->next;while (p && p->data != e){p = p->next;}return p;}//单链表的查找---查找某个元素值,返回该元素的序号int LocateElemInt(Linklist L, int e){LNode *p;p = L->next;int i = 1;while (p && p->data != e){p = p->next;i = i + 1;}if (p)return i;elsereturn0;}//单链表的插⼊---在第i个结点前插⼊值为e的结点(需要找第i-1个结点) bool ListInsert(Linklist &L, int i, int e){LNode *p, *s;p = L;int j = 0;while (p && j < i - 1){p = p->next;}if (!p || j > i-1)return false;s = new LNode;s->data = e;s->next = p->next;p->next = s;return true;}//单链表的删除---删除第i个结点,需要找到第i-1个结点bool DeleteList(Linklist &L, int i, int &e){LNode *p, *q;int j = 0;p = L;while (p && j < i - 1){p = p->next;}if (!(p->next) || j > (i-1))return false;q = p->next;e = q->data;p->next = p->next->next;delete q;return true;}//头插法建⽴单链表void CreatList_H(Linklist &L, int n){L->next = NULL;for (int i = n; i > 0; i--){LNode *p = new LNode;//建⽴新结点cin >> p->data;//读⼊数据p->next = L->next;L->next = p;}cout << "创建长度为" << n << "的单链表完毕!"<<endl; }//尾插法建⽴单链表void CreatList_R(Linklist &L, int n){L = new LNode;L->next = NULL;LNode *r = L;for (int i = 0; i < n; i++){LNode *p = new LNode;cin >> p->data;p->next = NULL;r->next = p;r = p;}}//单链表内容的遍历void ListDisply(Linklist L){printf("单链表中的内容为:");LNode *p;p = L->next;while (p){printf("%d ", p->data);p = p->next;}printf("\n\n\n\n");}int main(){//创建⼀个链表Linklist L;InitList(L);Linklist K;InitList(K);Linklist P;InitList(P);//创建三个结点LNode *a, *b, *c;a = new LNode;b = new LNode;c = new LNode;//判断空表if (!ListEmpty(L))printf("it is not empty!\n");elseprintf("it is empty!\n");//将三个结点串成串连成线⼉L->next = a;a->next = b;b->next = c;c->next = NULL;if (!ListEmpty(L))printf("it is not empty!\n");elseprintf("it is empty!\n");//给三个结点的数据域赋值a->data = 23;b->data = 87;printf("the length of list is: %d\n", ListLength(L));//获取第i个元素的值int e;GetElem(L, 2, e);printf("the value of second is:%d\n", e);//单链表的查找---返回地址printf("\n\nLocateElem--23: %x\n", (unsigned)LocateElem(L, 23)); printf("LocateElem--87: %x\n", (unsigned)LocateElem(L, 87));printf("LocateElem--99: %x\n", (unsigned)LocateElem(L, 99));//单链表的查找---返回序号printf("LocateElemInt--87: %d\n\n\n", LocateElemInt(L, 23));//头插法建⽴单链表---输⼊⼏个元素cout << "头插法建⽴单链表,请输⼊数据:" << endl;CreatList_H(K, 5);printf("the length of list is: %d\n", ListLength(K));//单链表的遍历ListDisply(K);//尾插法建⽴单链表---输⼊⼏个元素cout << "尾插法建⽴单链表,请输⼊数据:" << endl;CreatList_R(P,5);printf("the length of list is: %d\n\n", ListLength(P));//单链表的遍历ListDisply(P);getchar();getchar();getchar();return0;}。

备考笔记-销毁单链表

备考笔记-销毁单链表

备考笔记-销毁单链表单链表的销毁:链表销毁后不存在,不仅所有元素不复存在,头结点和头指针也不复存在。

算法思路:从头指针开始,依次释放所有节点。

定义⼀个备量指针,P,让它所指向的
⼀个变量要想指向某⼀个空间,我们就把这个空间的地址赋给P,⽐如:想让指针P指向变量a,那么,就 P = &a;这样就是把变量a 的地址赋值给指针p 了,⽽ p 就指向变量a 的地址。

如上图,想让指针p指向头结点,也就是指针L 所指向的结点,直接 p=L;就完事⼉。

接下来,让指针L 指向下⼀个结点的地址(L = L->next;),
然后再释放指针P 所指向的结点:delete p;或者 free(p);
如果这⾥⽤ delete p;那么前⾯开辟节点时,就⽤ new ;
如果这⾥⽤ free(p);那么前⾯开辟空间时,就⽤ malloc ⽅法;
再接下来就和上边操作⼀样,重复。

这个循环的结束条件:L==NULL,循环条件:L!=NULL
// 销毁单链表 L
Status DestroyList_L(LinkList &L){
Lnode *p; //⽤于指向要销毁的结点
while(L){ //循环条件,L ⾮空
p = L;//将头指针L 指向的地址赋值给指针P,使指针P 指向头结点
L = L->next;//让头指针L 指向下⼀个结点
delete p; //释放指针P 指向的结点
}
return OK; //循环结束,返回OK
}。

单链表的初始化,建立,插入,查找,删除

单链表的初始化,建立,插入,查找,删除

单链表的初始化,建立,插入,查找,删除。

#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;typedef int ElemType;//定义结点类型typedef struct Node{ElemTypedata;//单链表中的数据域struct Node*next;//单链表的指针域}Node,*LinkedList;//单链表的初始化LinkedList LinkedListInit() {Node*L;L = (Node*)malloc(sizeof(Node));//申请结点空间if(L ==NULL)//判断是否有足够的内存空间printf("申请内存空间失败\n");L-&gt;next =NULL;//将next设置为NULL,初始长度为0的单链表return L;}//单链表的建立1,头插法建立单链表LinkedList LinkedListCreatH(){Node*L;L = (Node*)malloc(sizeof(Node));//申请头结点空间L-&gt;next =NULL;//初始化一个空链表ElemTypex;//x为链表数据域中的数据while(scanf("%d",&amp;x) != EOF) {Node *p;p = (Node*)malloc(sizeof(Node));//申请新的结点p-&gt;data =x;//结点数据域赋值p-&gt;next =L-&gt;next;//将结点插入到表头L--&gt;|2|--&gt;|1|--&gt;NULL L-&gt;next = p;}returnL;}//单链表的建立2,尾插法建立单链表LinkedList LinkedListCreatT() {Node*L;L = (Node*)malloc(sizeof(Node));//申请头结点空间L-&gt;next =NULL;//初始化一个空链表Node*r;r =L;//r始终指向终端结点,开始时指向头结点ElemTypex;//x为链表数据域中的数据while(scanf("%d",&amp;x) != EOF){Node *p;p = (Node*)malloc(sizeof(Node));//申请新的结点p-&gt;data =x;//结点数据域赋值r-&gt;next =p;//将结点插入到表头L--&gt;|1|--&gt;|2|--&gt;NULL r = p;}r-&gt;next = NULL;returnL;}//单链表的插入,在链表的第i个位置插入x的元素LinkedList LinkedListInsert(LinkedList L,int i,ElemType x) {Node*pre;//pre为前驱结点pre =L;int tempi =0;for (tempi =1; tempi &lt; i; tempi++)pre =pre-&gt;next;//查找第i个位置的前驱结点Node*p;//插入的结点为pp = (Node*)malloc(sizeof(Node));p-&gt;data = x;p-&gt;next = pre-&gt;next;pre-&gt;next = p;returnL;}//单链表的删除,在链表中删除值为x的元素LinkedList LinkedListDelete(LinkedList L,ElemType x) {Node*p,*pre;//pre为前驱结点,p为查找的结点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

}
temp->next=NULL;
if(re=="last")p=temp;//p保存n个节点末尾节点地址
return p;
}
bool DestoryList(struct List ቤተ መጻሕፍቲ ባይዱp)//p为链表首地址
{
struct List *temp;
int i=0;
filename: c:\Users\Administrator.rider-saber\Documents\Visual Studio 2008\Projects\my_914_list\my_914_list\my_914_list.cpp
file path: c:\Users\Administrator.rider-saber\Documents\Visual Studio 2008\Projects\my_914_list\my_914_list
Lp=CreateList(10);
while (Lp!=NULL)
{
cout<<Lp->data<<" ";
Lp=Lp->next;
}
DestoryList(Lp);
return 0;
}
struct List *temp=p;
temp->data=0;
for (int i=0;i<n-1;++i)//n-1 个节点
{
temp->next=new struct List;
temp->next->data=i+1;
temp=temp->next;
struct List
{
int data;
struct List *next;
};
struct List * CreateList(int n,string re="first")//n是创建的结点数,re指定返回首节点地址,还是末尾结点地址
{
struct List *p=new struct List;//第一个1个节点
}
//struct List * CreateList(int n,string re="first");
//bool DestoryList(struct List *p);
int _tmain(int argc, _TCHAR* argv[])
{
struct List *Lp;
while(p!=NULL)
{
temp=p->next;
delete p;
p=temp;
cout<<i++<<endl;
}
if (p==NULL)
{
return true;
}
else
{
return false;
}
file base: my_914_list
file ext: cpp
purpose: 单链表的创建和销毁
*********************************************************************/
#include "stdafx.h"
/********************************************************************
锦城学院计科系c++方向
保留所有权利
created: 2013/09/14
created: 14:9:2013 17:15
相关文档
最新文档