C和指针之学习笔记(5)
第10章 使用结构和指针
- 单链表
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)的更多相关文章
- 02.C语言关于指针的学习笔记
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内 ...
- 《征服c指针》学习笔记-----统计文本单词数目的程序word_count
1.程序的要求:对用户指定的英文文本文件(包括标准输入),将英文单词按照字母顺序输出到用户指定的文本文件中(包括标准输出),并且在各单词后面显示单词的出现次数. 2.模块设计: 主要分为:1.从输入流 ...
- <深入理解C指针>学习笔记和总结 第四章 指针和数组
数组是一个什么玩意: 数组和指针我的理解,有同样之处也有不同之处.因有同样之处,因此一些资料上说,数组和指针本质是同样的.因有不同之处,因此也有一些资料上说,数组和指针是不一样的. 同样之处: 数组名 ...
- C和指针之学习笔记(6)
第17章 经典数据结构类型 堆栈 堆栈接口提供三种基本的操作:push.pop 和 top. Push:把一个新值压入到堆栈的顶部. Pop: 只把顶部元素从堆栈中移除,它并不返回这个值. Top: ...
- C和指针之学习笔记(4)
第9章 字符串 字符串的输入与输出 int ch; char strings[80]; FILE *input; (1)scanf(“%c”,&ch); printf(“%c \n” ...
- C和指针之学习笔记(3)
第8章 数组 1.数组与指针 数组名是一个个元素的地址. int a[10]; int b[10]; int *c; (1) c = & a[0]; &a[0]表示一个指向数 ...
- C和指针之学习笔记(2)
第6章 指针 1.在一组字符串中查找字符: #include<stdio.h> #include<assert.h> #include<stdlib.h> #def ...
- C和指针之学习笔记(1)
第1章 1.输入字符串 while((ch=getchar())!=EOF && ch!=’\n’) ; ch=getchar() while(ch!=EOF && ...
- C语言学习笔记之成员数组和指针
成员数组和指针是我们c语言中一个非常重要的知识点,记得以前在大学时老师一直要我们做这类的练习了,但是最的还是忘记了,今天来恶补一下. 单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个 ...
随机推荐
- Eclipse 断点调试
Eclipse 开发专用的Debug模式,用于发现问题解决问题. 1. 设置断点,程序会在改位置停止. 2. 按F5(step into), F6(step over)执行.F5指跳入,逐语句.会进入 ...
- 【BZOJ】4129: Haruna’s Breakfast 树分块+带修改莫队算法
[题意]给定n个节点的树,每个节点有一个数字ai,m次操作:修改一个节点的数字,或询问一条树链的数字集合的mex值.n,m<=5*10^4,0<=ai<=10^9. [算法]树分块+ ...
- 【leetcode 简单】第三十四题 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [ ...
- h5+js随机拖动鼠标产生动画效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- zedboard学习记录.3.oled,创建IP
环境:win7 .vivado 2017.4 .zedboard rev.d 首先建立工程. 1.Tools -> Create and Package New IP 2.Create AXI4 ...
- OTA之流式更新及shell实现
在OTA升级时,需要从网络下载OTA包,并写到flash上的对应分区中. 最简单的方式是将下载与更新分离,先将完整的数据包下载到本地,再将本地的OTA包更新到flash上.方便可靠. 但这种方式的问题 ...
- puppet practice
目标 试验环境有两台主机(VM)构成,一台是master,一台是agent,完成以下工作: 新建用户newuser; 安装 ubuntu-cloud-keyring package,更改文件/etc/ ...
- Eclipse java项目转换为web项目
1.打开.project文件,并修改文件, 修改如下: 找到:<natures> </natures>代码段,在代码段中加入如下内容并保存: <nature>org ...
- caffe Python API 之中值转换
# 编写一个函数,将二进制的均值转换为python的均值 def convert_mean(binMean,npyMean): blob = caffe.proto.caffe_pb2.BlobPro ...
- Cosbench测试 RGW S3 path_style_access=true模式支持
使用Ceph RGW Cosbench 测试时,文档中没有写如何使用 path_style_access 模式的方法. 查看了一下cosbench源码发现已经支持,只是文档没有写. 提交了一个iss ...