C的指针挺头疼的,先看一个例子:

给指针赋值和通过指针进行赋值这两种操作的差别确实让人费解。谨记区分的重要方法是:如果对左操作数进行解引用,则修改的是指针所指对象的值;    如果没有使用解引用操作,则修改的是指针本身的值。

帮助理解下列例子:

string s1 ("some value");

string *sp1 = &s1;                        //  sp1  ------> s1 :some value

string s2 ("another");

string *sp2 = &s2;                         // sp2 --------> s2: another

*sp1 = "a new value";                    // sp1---------> s1:a new value

sp1 = sp2;                                     // sp1----------> s2:another

下面是我做的使用单链表读取文件,并 显示:

test3的文本为:

Phuong Hoan1, 2234, Jan 25th 20141, 2011231
Phuong Hoan2, 2334, Jan 25th 20142, 2011232
Phuong Hoan3, 3434, Jan 25th 20143, 2011233
Phuong Hoan4, 5634, Jan 25th 20144, 2011234
Phuong Hoan5, 7834, Jan 25th 20145, 2011235
Phuong Hoan6, 8934, Jan 25th 20146, 2011236
Phuong Hoan7, 9034, Jan 25th 20147, 2011237
Phuong Hoan8, 2434, Jan 25th 20148, 2011238
Phuong Hoan9, 2534, Jan 25th 20149, 2011239
Phuong Hoan10, 2634, Jan 25th 20110, 20112310
Phuong Hoan11, 2734, Jan 25th 2011, 20112311
Phuong Hoan12, 2834, Jan 25th 20112, 20112312
Phuong Hoan13, 2934, Jan 25th 20113, 20112313
Phuong Hoan14, 3734, Jan 25th 20114, 20112314
Phuong Hoan15, 3834, Jan 25th 20115, 20112315
Phuong Hoan16, 3934, Jan 25th 20116, 20112316

  

我自己做了一个例子:使用单链表读取上面的文件并排序显示并有注释:

#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int data;/*data代表成绩分数*/
struct node *next;
}LNode,*LinkList;
LinkList Creat(void)/*创建链表,结束标志为当输入的数据为0!*/
{
LinkList H,p1,p2;
int n;
n=;
p1=p2=(LinkList)malloc(sizeof(LNode));
printf("输入数据:");
scanf("%d",&p1->data);
H=NULL;
while(p1->data!=)
{
n=n+;
if(n==)
H=p1;
else
p2->next=p1;
p2=p1;
p1=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p1->data);
}
p2->next=NULL;
return(H);
}
//上一段代码的解释(注意H是head头指针,P2是尾指针):
// 1轮:n=1 H=P1(p1指向一块儿data=用户输入值的地址,) p2=p1(P2也指向这块data=用户输入值的地址);
// p1=(LinkList)malloc(sizeof(LNode))==>(解释:P1不再指向这块地址,P1开始指向了新申请的地址)
//p2->next=NULL(将p2指针的next置为空);也就是说一轮结束之后:出现了H(头指针)和P2(尾指针)同时指向一块儿Data区域,且此区域的next=null;
// 二轮 n=2 p2->next=p1(p2指向的struct的next指针置为P1,结果为:H->地址一->P1)
// 然后p2=p1(P2不再指向原先的地址,现在P2指向了现在P1的位置,这样P2仍然是尾接点指针,H头指针不变,但是节点增加了新的P1)
// p1=(LinkList)malloc(sizeof(LNode));解释:P1不再指向原先的地址,新开辟一块儿地址,由P1指向它;
// p2->next=NULL; 将尾指针的next置为空,现在的链表为:H->Data1->Data2->P2(P2尾指针的next=NULL);
//3轮之后同理....
//最终返回了头指针H LinkList Sort(LinkList SL)/*递增排序函数:入口参数:链表的头指针,此为链表中的排序函数*/
{
LinkList p,q;
int temp;
for(p=SL;p!=NULL;p=p->next)
{
for(q=p->next;q!=NULL;q=q->next)
{
if(p->data>q->data)
{
temp=q->data;
q->data=p->data;
p->data=temp;
}
}
}
return SL;
}
// for(p=SL;p!=NULL;p=p->next)意思为遍历SL,一个个往下走,
//for(q=p->next;q!=NULL;q=q->next) 意思为:先拿 第二个元素与第一个元素比较,假如第一个大的话,1与2互换,否则不作处理
//然后拿第三个与第一个比较,假如第三个大的话,第三个元素与第一个元素互换,否则不做处理
//这样,第一轮过后,保证第一个元素是最小的,
//第二轮过后 第二个是次小的,这样,依次类推,由小到大就这样形成了.
int main()
{
LinkList L,S,K;
L=Creat();
printf("初始化的单链表数据序列为:\n");
for(S=L;S!=NULL;S=S->next)
printf("%d ",S->data);
Sort(L);
printf("\n按递增顺序排序后的序列为:\n");
for(K=L;K!=NULL;K=K->next)
printf("%d==>",K->data); return ;
}

此代码有解释,并且可以运行.

代码下载地址: http://download.csdn.net/detail/yinfuqing666/6936827

Linux C 单链表 读取文件 并排序 实例并解释的更多相关文章

  1. c语言之单链表的创建及排序

    今天对之前学习过的链表知识进行简单的总结顺便写点代码:创建一个链表有头插法跟尾插法两种,在下面代码中我们为结点分配的内存实在堆上分配的,因此需要我们手动释放,释放用free()函数 下面代码贴出具体代 ...

  2. Linux内核单链表

    主要说明Linux内核中单链表操作的关键思想,需要注意的地方 1. 假设 为了说明关键思想,对数据结构进行了精简 2. 数据结构定义 struct ListNode { int val; ListNo ...

  3. Linux C++ 单链表添加,删除,输出,逆序操作

    /*单链表操作*/#include <iostream>using namespace std; class Node{ public: Node(){ next=0; } Node(in ...

  4. Linux C++ TCP Socket传输文件或图片实例

    环境:Linux 语言:C++ 通信方式:TCP 下面用TCP协议编写一个简单的服务器.客户端,其中服务器端一直监听本机的6666号端口.如果收到连接请求,将接收请求并接收客户端发来的消息:客户端与服 ...

  5. linux 一行一行的读取文件

    #!/bin/bash #reading data from a file count= cat test1 | while read line do echo "Line $count: ...

  6. Linux 底下使用C语言的 单链表 ,双链表,二叉树 读取文件,并排序

    直接上代码 单链表Linux读文件排序: 双链表Linux读取文件排序: 二叉树LinuX读取文件并排序:

  7. 史上最全单链表的增删改查反转等操作汇总以及5种排序算法(C语言)

    目录 1.准备工作 2.创建链表 3.打印链表 4.在元素后面插入元素 5.在元素前面增加元素 6.删除链表元素,要注意删除链表尾还是链表头 7.根据传入的数值查询链表 8.修改链表元素 9.求链表长 ...

  8. c++单链表基本功能

    head_LinkNode.h /*单链表类的头文件*/#include<assert.h>#include"compare.h"typedef int status; ...

  9. 面试之路(10)-BAT面试之java实现单链表的插入和删除

    链表的结构: 链表在空间是不连续的,包括: 数据域(用于存储数据) 指针域(用于存储下一个node的指针) 单项链表的代码实现: 节点类 构造函数 数据域的get,set方法 指针域的get,set方 ...

随机推荐

  1. Oracle DBA从小白到入职实战应用

    现如今Oracle依然是RDBMS的王者,在技术上和战略上,Oracle仍然一路高歌猛进,并且全面引领行业迈入了云时代,伴随着12cR2即将在2016年正式发布,学习Oracle之路依旧任重道远,目前 ...

  2. 轻量级应用开发之(02)UIView

    一 控件 1.屏幕上的所有UI元素都叫做控件(也有叫做视图.组件)比如按钮(UIButton).文本(UILabel)都是控件. 2.控件的共同属性有哪些? 尺寸,位置,背景色 3. 苹果将控件的共同 ...

  3. 架构(Architecture)和框架(Framework)杂谈

    1. 架构和框架的设计层次不同       类似于硬件设计,软件设计也分为不同的层次.典型的软件设计层次如下图:        在这个图中我们可以看到,Framework处于Micro-archite ...

  4. abstract 类 构造函数

    public abstract class CommonReq { private String TransNo { get; set; } public String SubmitData { ge ...

  5. tomcat管理员配置

    纸上得来终觉浅,绝知此事要躬行 博客园 首页 新闻 新随笔 联系 管理 随笔- 458  文章- 0  评论- 38  Tomcat的Manager显示403 Access Denied   管理to ...

  6. Java初学(六)

    一.final(最终)可以修饰类.方法.变量 特点:final修饰类,该类不能被继承 final修饰方法,该方法不能被重写(覆盖.重载.复写)        final修饰变量,该变量不能被重新赋值. ...

  7. linux set ff命令

    在windows下写的代码传到linux上无法直接运行时 vi 文件名 :set ff=unix :wq 这样就可以运行了

  8. spring mvc开发过程知识点记录

    给一个客户做的一个小项目,需求就是输入类似一个短网址http://dd.yy/xxxx然后跳转到另外一个域名下的图书文件.(实际很多短网址站都提供API供调用吧,不过客户需求是他自己建立一个短网址服务 ...

  9. Mongodb for C# 分组查询

    #region 排序获取集合 static List<BsonDocument> GetPagerWithGroup(string connectionString, string dat ...

  10. __stdcall,__cdecl,__fastcall的区别

    __stdcall,__cdecl,__fastcall的区别 标签: dll编译器pascalclassimportinitialization 2009-12-09 15:07 10472人阅读  ...