C和指针笔记——链表的研究和改善

1 //code by zzlpp && code for link_list training
2 typedef struct Node
3 {
4     int value;
5     struct Node *link;
6 }Node;
7
8 //头文件只包含节点的声明 文
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <malloc.h>
 4 #include "node.h"
 5
 6 Node*creatnode(int value);
 7 void insertnode( Node **pointer,int value );
 8
 9 void main()
10 {
11     Node *p=creatnode(5);
12     Node **pointer=&p;
13     insertnode(pointer,3);
14     do
15     {
16         printf("%d\t",p->value);
17         p=p->link;
18     }while( p!=NULL );
19     printf("\n");
20     system("pause");
21 }
22 Node *creatnode(int value)
23 {
24     Node *root;
25     root=( Node *)malloc( sizeof(Node) );
26     if (root==NULL)
27     {
28         free( root );
29         printf("error\n");
30         exit(EXIT_FAILURE);
31     }
32     root->value=value;
33     root->link=NULL;
34     return root;
35 }
36 void insertnode( Node **pointer,int value )
37 {
38     Node *current;
39     Node *previous;
40
41     previous=NULL;
42     current=*pointer;
43
44     Node *newnode=( Node* )malloc( sizeof(Node) );
45     if ( newnode==NULL )
46     {
47         free( newnode );
48         printf("error\n");
49         exit(EXIT_FAILURE);
50     }
51     newnode->value=value;
52     while ( current->value<value && current->link!=NULL )
53     {
54         previous=current;
55         current=current->link;
56     }
57     if ( current->link==NULL )
58     {
59         if ( current->value<value )
60         {
61             current->link=newnode;
62             newnode->link=NULL;
63         }
64         else
65         {
66             newnode->link=current;
67             *pointer=newnode;
68         }
69     }
70     else
71     {
72         newnode->link=current;
73         previous->link=newnode;
74     }
75 }

和原书上写的有些出入,总的来说就是要考虑到3种情况,第一种是要考虑插在链表的中间,第二种是要考虑到查到结尾,最后是要你考虑到查到开头,这三种情况缺一不可,个人觉得如此处理更为清晰一些。

件名  “node.h”                   
时间: 2024-10-13 13:03:32

C和指针笔记——链表的研究和改善的相关文章

指针、链表的原理和各类操作相关心得以及学生信息管理系统

伴随着学期末的到来,C语言程序设计这门课也接近尾声.经过前两次的教学,我们对C语言也有了深刻的了解,学习的内容也不断的加深.这次我们就学习了C语言程序设计里应用最广泛,也是最难学习的知识--链表和指针的应用. 关于指针和链表这两个的应用和上次的管理系统有着直接的关系,没有添加链表和指针的管理系统无法做到精确的查找.数据存储方面也显得不方便.所以指针和链表的作用能够直接指向你所需要的数据地址,使程序更加完善.这次我就利用指针的应用制作了一个管理员工工资等信息的程序. §1 指向结构体变量的指针变量

C语言课程设计第三节课:指针和链表使用 &#160; &nbsp; 150809205

一.学习体会 C语言的难点就是指针,学习的时候感觉指针的难点在于与其相关的技术和方法很多,所以学习              的时候并不能像前边一样一个知识点一道题就明白了. 二.以下是我对指针原理的理解 指针通常指向一片储存空间,而开辟的储存空间地址为指针的量 1.指针与数组 数组开辟的是一段连续的内存空间,而指针则是单一特定内存地址,因此两者不可互相转换. 数组变量可以赋值给指针(即将数组第一个变量的地址赋予指针). 2.动态内存分配与静态内存分配 (1)动态内存分配 根据程序的需要开辟空间

彭界博-个指针与链表

1.指针与数组 指针通常指向一片储存空间,而开辟的储存空间地址为指针的量:数组开辟的是一段连续的内存空间,而指针则是单一特定内存地址,因此两者不可互相转换. 数组变量可以赋值给指针(即将数组第一个变量的地址赋予指针). 2.动态内存分配与静态内存分配 (1)动态内存分配 根据程序的需要开辟空间,不需要预先分配,智能自动,可以根据需要增大或减小. (2)静态内存分配 即预先分配好储存空间,缺点显而易见,需要预先知道数据的大小,修改数据的时候需要更改已经分配好的储存空间,浪费内存等. (3)函数 v

指针与链表

指针与数组 指针通常指向一片储存空间,而开辟的储存空间地址为指针的量:数组开辟的是一段连续的内存空间,而指针则是单一特定内存地址,因此两者不可互相转换.数组变量可以赋值给指针(即将数组第一个变量的地址赋予指针). 动态内存分配与静态内存分配 (1)动态内存分配 根据程序的需要开辟空间,不需要预先分配,智能自动,可以根据需要增大或减小. (2)静态内存分配 即预先分配好储存空间,缺点显而易见,需要预先知道数据的大小,修改数据的时候需要更改已经分配好的储存空间,浪费内存等. (3)函数 void f

关于指针和链表中的一些问题

学习数据结构时对指针和链表很迷糊,也就自己总结 一下,如果有错误或者理解上的错误欢迎指正,谢谢 指针 指针是什么,指针就是指针类型,就和int 类型,float类型等一样,而对于指针个人当时学习的时候总被*弄得迷糊, *的作用: 1:类型说明符,int*p,定义p是一个指向整型的指针变量,p就是这个地址,具体说明教科书有.所以有int *p;p=&a或者是int *p=&a;在这里时强调一点int* p,可以写成这种形式,是指p所指向的数据域是整型, 2:指针指向的值的运算 3:野指针 当

C和指针笔记 3.6链接属性

链接属性决定如何处理在不同文件中出现的标识符.标识符的作用域也它的链接属性有关,但这两个属性并不相同. 没有链接属性的标识符(none)总是被当作单独的个体,也就是说该标识符的多个声明被当作独立不同的实体. internal链接属性的标识符在同一个源文件内的所有声明中都指同一个实体,但位于不同源文件的多个声明则分属不同的实体.最后,属于external链接属性的标识符不管声明多少次.位于几个源文件都表示同一个实体. 图3.2的程序骨架通过展示名字声明的所有不同方式,描述了链接属性.在缺省情况下,

指针与链表结构理解

指针与链表结构理解#include<stdio.h>int main(void){ int a=3,*p; p=&a; printf("a=%d,*p=%d\n",a,*p); *p=10; printf("a=%d,*p=%d\n",a,*p); printf("Enter a:"); scanf("%d",&a); printf("a=%d,*p=%d\n",a,*p); r

C和指针笔记 3.7 存储类型

变量的破碎类型是指存储变量值的内存类型.变量的存储类型决定变量何时创建.何时销毁以及它的值将保持多久. 有三个地方可以用于存在变量:普通内存.运行时堆栈.硬件寄存器. 变量的缺省存储类型取决于它的声明位置.凡是在任何代码块之外声明的变量问题存储于静态内存中,也就是不属于堆栈的内存,这类变量称为静态变量.对于这类变量,你无法为它们指定其他存储类型.静态变量在程序运行之前创建,在程序的整个执行期间始终存在.它始终保持原先的值,除非给它赋一个不同的值或者程序结束. 在代码块内部声明的变量的缺省存储类型

C和指针笔记 3.8 static关键字

当用于不同的上下文环境时,static关键字具有不同的意思. 当它用于函数定义时,或用于代码块之外的变量声明时,static关键字用于修改标识符的链接属性,从external改为internal,但标识符的存储类型和作用域不受影响.用这种方式声明的函数或变量只能在声明它们的源文件中访问. 当它用于代码块内部的变量声明时,static关键字用于修改变量的存储类型,从自动变量修改为静态变量,但变量的链接属性和作用域不受影响.用这种方式声明的变量在程序执行之前创建,并在程序的整个执行期间一起存在,而不