第10章 使用结构和指针

  1. 单链表

typedef struct NODE {

struct NODE *link;

int value;

} Node;

插入到一个有序单链表:

#include<stdio.h>

#include<stdlib.h>

#include "sll_node.h"

#define FALSE 0

#define TRUE 1

int sll_insert( Node **linkp, int new_value)  //指针的指针

{

Node *current;

Node *new;

//寻找正确的插入位置,方法是按序访问链表,直到到达一个

//其值大于或等于新值的节点

while((current= *linkp)!=NULL && current->value<new_value)

linkp=¤t->link;

new=(Node *)malloc(sizeof( Node ));

if( new == NULL )

return FALSE;

new->value = new_value;

//在链表中插入新节点,并返回TRUE

new->link = current;

*linkp = new;

return TRUE;

}

2.双链表

typedef struct NODE {

struct NODE *fwd;  //指向后一个节点

struct NODE *bwd;  //指向前一个节点

int value;

} Node ;

在双链表插入节点

#include<stdio.h>

#include<stdlib.h>

#include "doubly_liked_list_node.h"

int dll_insert( Node *rootp, int value)

{

Node *this;     //指向应该在新节点之前的那个节点

Node *next;     //指向应该在新节点之后的那个节点

Node *newnode;

for ( this = rootp; (next = this->fwd)!=NULL; this = next)

{

if ( next->value == value)

return 0;

if( next->value > value)

break;

}

newnode = (Node *)malloc(sizeof( Node));

if ( newnode == NULL )

return -1;

newnode->value = value;

//把新节点添加到链表中

newnode->fwd = next;

this->fwd=newnode;

if( this != rootp )

newnode->bwd = this;

else

newnode->bwd = NULL;

if( next != NULL )

next->bwd = newnode;

else

rootp->bwd = newnode;

return 1;

}

}

第15章 输入/输出函数

1、fseek()和ftell()的用法

int  fseek( FILE  *stream, long  offset, int  from);

int  ftell( FILE  *stream);

  ftell 函数返回流的当前位置

  fseek 函数改变下一个读取写入操作的位置。第一个参数:一个指向被搜索文件的FILE指针。第二个参数:偏移量,表示从起始要移动的距离,可以为正(前移)、负(后移)、零(保持不动)。第三个参数:模式,用来标识起始点(SEEK_SET:文件开始; SEEK_CUR:当前位置; SEEK_END:文件结尾)

fseek( fp, l0L , SEEK_SET )  //个字节

#include<stdio.h>

#include<stdlib.h>

#define CNTL_Z '\032'

#define SLEN 50

int main()

{

char file[SLEN];

char ch;

FILE *fp;

long count ,last;

puts("Enter the name of the file to be processed:");

gets(file);

if((fp = fopen(file,"rb"))==NULL)

{

printf("reverse can't open %s \n",file);

exit(1);

}

fseek(fp,0L,SEEK_END); //定位到文件结尾处

last=ftell(fp);

for(count=1L;count<=last;count++)

{

fseek(fp,-count,SEEK_END);

ch=getc(fp);

if(ch!=CNTL_Z && ch!='\r')

putchar(ch);

}

putchar('\n');

fclose(fp);

return 0;

}

运行结果:

C和指针之学习笔记(5)的更多相关文章

  1. 02.C语言关于指针的学习笔记

    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内 ...

  2. 《征服c指针》学习笔记-----统计文本单词数目的程序word_count

    1.程序的要求:对用户指定的英文文本文件(包括标准输入),将英文单词按照字母顺序输出到用户指定的文本文件中(包括标准输出),并且在各单词后面显示单词的出现次数. 2.模块设计: 主要分为:1.从输入流 ...

  3. &lt;深入理解C指针&gt;学习笔记和总结 第四章 指针和数组

    数组是一个什么玩意: 数组和指针我的理解,有同样之处也有不同之处.因有同样之处,因此一些资料上说,数组和指针本质是同样的.因有不同之处,因此也有一些资料上说,数组和指针是不一样的. 同样之处: 数组名 ...

  4. C和指针之学习笔记(6)

    第17章 经典数据结构类型 堆栈 堆栈接口提供三种基本的操作:push.pop 和 top. Push:把一个新值压入到堆栈的顶部. Pop: 只把顶部元素从堆栈中移除,它并不返回这个值. Top: ...

  5. C和指针之学习笔记(4)

    第9章 字符串 字符串的输入与输出 int  ch;  char strings[80];  FILE *input; (1)scanf(“%c”,&ch);   printf(“%c \n” ...

  6. C和指针之学习笔记(3)

    第8章 数组 1.数组与指针 数组名是一个个元素的地址. int  a[10];  int  b[10];  int  *c; (1) c = & a[0]; &a[0]表示一个指向数 ...

  7. C和指针之学习笔记(2)

    第6章 指针 1.在一组字符串中查找字符: #include<stdio.h> #include<assert.h> #include<stdlib.h> #def ...

  8. C和指针之学习笔记(1)

    第1章 1.输入字符串 while((ch=getchar())!=EOF  &&  ch!=’\n’) ; ch=getchar() while(ch!=EOF  && ...

  9. C语言学习笔记之成员数组和指针

    成员数组和指针是我们c语言中一个非常重要的知识点,记得以前在大学时老师一直要我们做这类的练习了,但是最的还是忘记了,今天来恶补一下.     单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个 ...

随机推荐

  1. MongoDB-3.4集群搭建:分片

    概念 集群拥有三个节点: 分片(sharding),分发路由(query routers)和配置服务器 (config server) Shard 分片是存储了一个集合部分数据的MongoDB实例,每 ...

  2. python初步学习-面向对象之 类(二)

    方法重写 如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法: #!/usr/bin/env python #coding:utf8 class Parent: def myMeth ...

  3. python笔记之BytesIO

    1. 什么是BytesIO BytesIO与StringIO类似,不同的是StringIO只能存放string,BytesIO是用来存放bytes的,它提供了在内存中读写字节的能力. 即在内存中读写字 ...

  4. 环境变量配错了 command not found

    一般就是忘记在PATH 前面加$ 1.可以用whereis或者which命令查看一下有没有这个命令 具体执行which lswhereis ls 2.系统环境变量导致的问题解决方案: exportPA ...

  5. BurpSuite 设置Hostname Resolution

    #写在前面 这种情况你可能遇到过: 对方用了CDN, 你查到了对方真实IP, 但还不能100%肯定. 这时候, 最好的测试就是 win/linux修改HOST文件 Win重启电脑 Linux重启网络 ...

  6. DNSLOG在渗透测试中的玩法儿

    首先了解一下DNS是啥??? DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读 ...

  7. 南邮PHP反序列化

    题目如下: <?php class just4fun { var $enter; var $secret; } if (isset($_GET['pass'])) { $pass = $_GET ...

  8. 73.Vivado使用误区与进阶——在Vivado中实现ECO功能

    关于Tcl在Vivado中的应用文章从Tcl的基本语法和在Vivado中的应用展开,继上篇<用Tcl定制Vivado设计实现流程>介绍了如何扩展甚至是定制FPGA设计实现流程后,引出了一个 ...

  9. ubuntu 命令配置ip 网关 dns

    如果是在虚拟机中使用Ubuntu,先设置好主机的网络,然后配置虚拟机Ubuntu的IP和网关 如果主机操作系统就是Ubuntu,请直接参照下文进行设置 内容如下: 1. 检验是否可以连通,就使用pin ...

  10. java线上应用故障排查之二:高内存占用【转】

    前一篇介绍了线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查. 搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMemoryError: PermGe ...