C++ 动态数据结构(二)

1.单链表结点定义的格式:

struct   Link

{

type    data;

struct  Link    *next;

};

虽然单链表插入、删除方便,不需要移动其他结点的优点,但是它也有一些缺点:

只能顺序访问,一旦断链就会丢失其中的数据,所以要注意一下。

2.单链表的遍历

遍历就是逐个访问每个数据元素的过程。遍历是各种其他操作的基础。

遍历的关键是指针的在链表结点之间的移动。

遍历中“访问”结点数据的含义非常广泛,可以是打印,也可以是比较等其它操作。

3.单链表的输出

(1)所谓单链表的输出,就是将链表的各个结点的数据输出。

(2)具体做法为:令指针 p 指向链表的头结点,输出其数据,然后使 p 指向链表的下一个结点,再输出,直到链表的末尾为止。

核心代码:

p = head;

printf( "%5d",p->data );

p = p->next;

具体代码:

#include <stdio.h>

void PrintList(struct Link    *head)

{

struct  Link  *p;

int   i = 1;

p = head;

while ( p != NULL ) {

printf("%5d%d ", i, p->data);

p = p->next;

i ++;

}

void  main()

{

struct Link    a={12}, b={35}, c={43};

struct Link   *head;

a.next = &b;

b.next = &c;

c.next = NULL;

head = &a;

PrintList(head);

}

时间: 2024-11-06 17:48:39

C++ 动态数据结构(二)的相关文章

数据结构——二叉搜索树、B树、B-树

数据结构——二叉搜索树.B树.B-树 1. 综述 二叉排序树(Binary Sort Tree),又叫二叉查找树(Binary Search Tree),也叫二叉排序树. 二叉搜索树满足以下性质: 1. 若根节点左子树不为空,则左子树上的所有节点均小于根节点: 2. 若根节点右子树不为空,则右子树上的所有节点均大于根节点: 3. 其左右子树也是二叉搜索树(递归定义): 4. 没有键值相等的点. B树就是B-树.B树/B-树英文叫B-Tree,可能被不小心翻译成了B-树.

java的动态数据结构和泛型

动态数据结构和泛型 0 详细介绍java中的数据结构 1 1 List 5 1.1 ArrayList 5 2 Set 6 2.1 HashSet与TreeSet的区别 6 3 Map 8 4 迭代器 9 5 泛型 9 0 详细介绍java中的数据结构 也许你已经熟练使用了java.util包里面的各种数据结构,但是我还是要说一说java版数据结构与算法,希望对你有帮助. 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类

一句话动态开辟二维数组

#include<iostream> using namespace std; //动态开辟int p[4][5]数组 void main() { //为了验证正确性,我们先把开辟的一维数组赋值给 pp int *pp=new int[20]; int i=0,j=0; for(i=0;i<20;i++)//为一维数组中每一个元素赋值,并输出该元素地址 { pp[i]=i; cout<<&(pp[i])<<" ";//即 pp+i }

Jquery.Qrcode在客户端动态生成二维码并添加自定义Logo

0 Jquery.Qrcode简介 Jquery.Qrcode.js是一个在浏览器端基于Jquery动态生成二维码的插件,支持Canvas和Table两种渲染方式,它的优点是在客户端动态生成,减轻了服务端压力,尤其是在大量使用二维码的系统中.Jquery.Qrcode主要包括以下参数设置: render 定义二维码的渲染方式,有table和canvas两种渲染方式 width 定义二维码的宽度 height 定义二维码的高度 text 定义二维码内容 typeNumber 二维码的计算模式 一般

动态创建二维vector数组+指针与引用的区别

二维vectorvector<vector <int> > ivec(m ,vector<int>(n));    //m*n的二维vector 动态创建m*n的二维vector方法一:vector<vector <int> > ivec;ivec.resize(m);for(int i=0;i<m;i++) ivec[i].resize(n); 方法二:vector<vector <int> > ivec;ivec

C语言 动态创建二维数组

/*C语言 如何动态创建二维数组 转化为一维数组申请数组,创建和释放都比较简单 */ #include <stdlib.h> #include <stdio.h> #include <malloc.h> #define RANK 10 #define COLUMN 7 int main() { int i,j; int (*p)[COLUMN]; //动态生成二维数组,指定列数为COLUMN,如果想改,自己该里面 //的参数,如果想定义n行2列就为: p=(int (*

C++动态申请二维数组与拷贝构造函数

一.C++动态申请二维数组 在C++中不能直接动态申请二维数组,经过一番搜索,发现一种动态申请二维数组较好的方法. 代码如下(MATRIX_TYPE为某一种类型,Lines和Columns): MATRIX_TYPE** elem; //C++二维矩阵动态申请空间 elem = new MATRIX_TYPE*[Lines]; elem[0] = new MATRIX_TYPE[Lines * Columns]; for(int i = 1; i < Lines; i++) elem[i] =

动态创建二维数组

vector创建二维数组 初始化二维数组 vector<vector <int> > ivec(n ,vector<int>(m)); //n*m的二维vector vector<vector <int> > ivec(n , vector<int>(m, 0)); //n*m的二维vector,所有元素为0 动态创建m*n的二维 方法一: vector<vector <int> > ivec; ivec.re

C++中动态申请二维数组并释放方法

C/C++中动态开辟一维.二维数组是非常常用的,以前没记住,做题时怎么也想不起来,现在好好整理一下. C++中有三种方法来动态申请多维数组 (1)C中的malloc/free (2)C++中的new/delete (3)STL容器中的vector 下面逐一介绍: 第一种:malloc/free 1.动态开辟一维数组 [cpp] view plaincopy //动态开辟一维数组 void dynamicCreate1Array() { int m; int i; int *p; printf("

【C语言】动态创建二维数组

//动态创建二维数组 #include <stdio.h> #include <stdlib.h> #include <malloc.h> int main() { int i,j; int n,m; //以n行5列为例 int (*p)[5]; printf("请输入行数:"); scanf("%d",&n); p=(int(*)[5])malloc(5*n*sizeof(int)); for(i=0;i<n;i+