数据结构与算法基础之非循环单链表创建和链表遍历

 1 #include<stdio.h>
 2 #include<malloc.h>
 3 #include<stdlib.h>
 4 //函数声明
 5 PNODE create_list();//返回值是链表头结点的地址
 6 void traverse_list(PNODE pHead);
 7
 8 typedef struct Node{
 9     int data;//数据域
10     struct Node * pNext;//指针域
11 }NODE,*PNODE;//NODE等价于struct Node  PNODE等价于struct Node*
12
13 int main(){
14     PNODE pHead = NULL;//等价于struct Node * pHead = NULL;
15
16     pHead = create_list();//创建一个非循环单链表,并将该链表的头结点的地址赋值给pHead
17     traverse_list(pHead);//遍历
18
19     return 0;
20 }
21
22 PNODE create_list(){
23     int len;//有效节点的个数
24     int i;
25     int val;//临时存放用户输入的结点的值
26
27     //分配一个不存放有效数据的头结点
28     PNODE pHead = (PNODE)malloc(sizeof(NODE));
29     if(pHead==NULL){
30         printf("分配失败,程序终止");
31         exit(-1);
32     }
33
34      PNODE pTail = pHead;
35      pTail->PNext = NULL;//若只有一个结点,此时就为尾节点,指针域应当为空
36     printf("链表节点个数:");
37     scanf("%d",&len);
38
39     for(i=0;i<len;i++){
40         printf("请输入第%d个节点的值:",i+1);
41         scanf("%d",&val);
42
43         PNODE pNew = (PNODE)malloc(sizeof(NODE));//生成新结点
44              if(pNew==NULL){
45             printf("分配失败,程序终止");
46             exit(-1);
47         }
48         pNew->data = val;//把数据存放进数据域
49         pTail->pNext = pNew;//把新结点地址赋值给尾节点指针域
50         pNew->pNext = NULL;//把新结点指针域赋值为空
51         pTail = pNew;//最后一步把新结点地址复制给尾节点(就是让新结点成为尾节点)
52        // pHead->pNext = pNew;
53        // pNew->pNext=NULL;//最后一个结点的指针域为空
54     }
55     return pHead;
56 }
57
58 void traverse_list(PNODE pHead){
59     PNODE p = pHead->pNext;//若链表为空,则头结点指针域就为空,则p就为空
60
61     while(p!=NULL){
62         printf("%d ",p->data);
63         p=p->pNext;
64     }
65     printf("\n");
66     return;
67 }

原文地址:https://www.cnblogs.com/sunbr/p/11318621.html

时间: 2024-10-01 13:23:41

数据结构与算法基础之非循环单链表创建和链表遍历的相关文章

数据结构与算法基础之非循环单链表节点的操作

插入节点 1 //写法一: 2 r = p->pNext; //r为临时变量 3 p->pNext = q; //q为要插入的节点地址 4 q->next = r; 5 6 7 //写法二: 8 q->pNext = p->pNext; //将原来指向下一节点的指针域赋值给插入的节点的指针域 9 p->pNext = q; //原来的节点的指针域被赋值了插入的节点的地址 删除节点 1 r = p->pNext; 2 //将要删除的节点的地址赋值给临时变量,方便最后

数据结构与算法基础学习笔记

*********************************************            ---算法与数据机结构--- 数据结构:由于计算机技术的发展,需要处理的对象不再是纯粹的数值,还有像字符,表,图像等具有一定结构的数据,需要用好的算法来处理这些数据. 我们把现实中大量而又复杂的问题以特定的数据类型的特定的存储结构保存到主存储器中,以及在此基础上为实现某个功能而执行的相应操作(查找排序),这个相应的操作也叫算法. 数据结构 = 个体 +个体的关系算法 =对存储数据的操

数据结构与算法基础 模块一

在软件水平考试中,数据结构与算法基础的相关内容是考试上午进行的,那么,接下来将对有关数据结构的内容进行整理和归纳,以便于在整个的软考准备阶段能够更加清楚和有效率的进行学习和回忆. 以下均为个人针对于数据结构的相关内容的整理,后期根据深入的程度不断地完善和改进,如果有什么错误或者不足,希望可以提出来,一起进步. 常用的数据结构:      数组(静态数组,动态数组),线性表,链表(单向链表,双向链表,循环链表),队列,栈,树(平衡数,二叉树,查找树,堆,线索树),图等的定义,存储和操作,HASH(

数据结构与算法基础

数据结构与算法基础: 顺序存储结构 链式存储结构 什么是树结构?为什么使用树结构?树的基本概念 二叉树: 任何一个节点的子节点数量不超过2 二叉树的子节点分左节点和右节点 满二叉树:所有的叶子节点都在最后一层,而且节点总数为2的n次方-1[n是树的高度]完全二叉树:所有叶子节点都在最后一层或者倒数第二层,且最后一层的叶子节点在左边连续,倒数第二节的叶子节点在右边连续 数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来.这些按序排列的同类数据元素的集合称为数组.在C语言

数据结构和算法设计专题之---判断单链表中是否有环,环的长度,环的入口节点

题目: 给定一个单链表,只给出头指针head: 1.如何判断是否存在环? 2.如何知道环的长度? 3.如何找出环的连接点在哪里? 4.带环链表的长度是多少? 解法: 1.对于问题1,使用追赶的方法,设定两个指针slow.fast,从头指针开始,每次分别前进1步.2步.如存在环,则两者相遇:如不存在环,fast遇到NULL退出. 2.对于问题2,记录下问题1的碰撞点p,slow.fast从该点开始,再次碰撞所走过的操作数就是环的长度s. 3.问题3:有定理:碰撞点p到连接点的距离=头指针到连接点的

数据结构与算法基础之链表插入和删除算法

1 #include<stdio.h> 2 #include<malloc.h> 3 #include<stdlib.h> 4 5 //函数声明 6 PNODE create_list();//返回值是链表头结点的地址 7 void traverse_list(PNODE pHead); 8 bool is_empty(PNODE pHead); 9 int length_list(PNODE pHead); 10 bool insert_list(PNODE,int,

链表创建和链表遍历算法的演示_C语言

今天搞了一个多小时,头是疼的,应该是没休息好吧,学习了数据结构这一节,感觉收益良多,下面贴上代码和心得: 1 /*24_链表创建和链表遍历算法的演示*/ 2 # include <stdio.h> 3 # include <malloc.h> 4 # include <stdlib.h> 5 6 typedef struct Node 7 { 8 int data;//数据域 9 struct Node * pNext;//指针域 10 }NODE, *PNODE;//

数据结构与算法系列(1)-单链表类的实现(C++)

通过定义一个C++类封装单链表这种数据结构, 封装的方法有: 1.通过输入创建单链表: 2.获取单链表的数据元素个数: 3.打印输出单链表中各个元素: 4.搜索某个元素在单链表中的位置: 5.在某个位置之后插入一个结点: 6.在某个位置删除一个节点: 7.单链表逆置: 8.单链表是否存在回环的判定: 9.单链表的升序排序: 10.两个单链表的升序合并: 11.两个单链表的降序合并. 注:单链表的排序采用的是快速排序的方法. 下面是C++写的程序代码,附运行截图. #include <iostre

数据结构和算法基础之单链表

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { public class Node<T> { public T Data; public Node<T> Next; public Node() { Data = default(T); N