http://www.oschina.net/code/snippet_252667_27314#comments

这个代码有很多错误,估计是从老谭书上抄来但是很多还抄错了:对照老谭的书好好研究下。切记!

p2是p1的跟屁虫!切记

#include"stdio.h"
#include"malloc.h"
struct stu
{
int num;//这个是学号
float score;//这个是分数
struct stu *next;
};
struct stu*create()
{
int n;//这个n这里不大合适 ,最好弄个全局的
struct stu *head,*p1,*p2;
p1=p2=(struct stu*)malloc(sizeof(struct stu));
scanf("%d %f",&p1->num,&p1->score);
head=NULL;
n=0;
while(p1->num!=0)
{
n++;
if(n==1)head=p1;
else
{
p2->next=p1;
p2=p1;
p1=(struct stu*)malloc(sizeof(struct stu));
scanf("%d %f",&p1->num,&p1->score);
}
}
p2->next=NULL;
return head;
};
//难点在插入操作的实现上(默认从小到大排列的)
struct stu *insert(struct stu *head,struct stu *stud)
{
struct stu *p0,*p1,*p2;
p1=head;
p0=stud;
while((p0->num>p1->num)&&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num<p1->num)//能在队列中插入(不是尾巴)
{
if(head==p1)head=p0;//在头部前插入
else//在非头部插入
{
p2->next=p0;
p0->next=p1;
}
}
else//在尾巴插入
{
p1->next=p0;
p0->next=NULL;
}
  //这个地方要怎么维护总的num呢 ?
return head;
};
//删除操作难度次之
struct stu *del(struct stu *head,int num)
{
struct stu *p1,*p2;
p1=head;
if(head!=NULL)
{
while((p1->num<num)&&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(num==p1->num)//找到节点了
{   //这里要考虑删除头节点的情况
p2->next=p1->next;
p2=p1;
      //要考虑删除的节点内存释放
      //要考虑维护n的数目
}
else//没有找到节点
{
printf("NO Result!!!\n");
}
}
else
printf("The linklist is EMPTY\n");
return head;
};
void print(struct stu *head)
{
struct stu *p;
p=head;
while(p)
{
printf("%d %f\n",p->num,p->score);
p=p->next;
}
}
void main()
{
int n;
struct stu *create();
struct stu *insert(struct stu *head,struct stu *stud);
void print(struct stu *head);
struct stu *head,*p,*p1;
head=create();
p=head;
print(p);
printf("please input :\n");
scanf("%d %f",&p1->num,&p1->score);
p=insert(head,p1);
print(p);
printf("please input the del num:\n");
scanf("%d",&n);
p=del(head,n);
print(p);
}

转贴:C语言链表基本操作的更多相关文章

  1. ZT C语言链表操作(新增单向链表的逆序建立)

    这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html ZT 链表逆序http://www.cnblogs.com/ ...

  2. c++学习笔记—单链表基本操作的实现

    用c++语言实现的单链表基本操作,包括单链表的创建(包括头插法和尾插法建表).结点的查找.删除.排序.打印输出.逆置.链表销毁等基本操作. IDE:vs2013 具体实现代码如下: #include  ...

  3. C语言SQLite3基本操作Demo

    /************************************************************************** * C语言SQLite3基本操作Demo * 声 ...

  4. C语言链表实例--玩转链表

    下图为最一简单链表的示意图: 第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量.以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,姓名 n ...

  5. C语言 链表

    原文:C语言 链表 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将要实现19个功能. ...

  6. C语言链表操作模板(添加,删除,遍历,排序)

    C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...

  7. Java链表基本操作和Java.util.ArrayList

    Java链表基本操作和Java.util.ArrayList 今天做了一道<剑指offer>上的一道编程题“从尾到头打印链表”,具体要求如下:输入一个链表,按链表值从尾到头的顺序返回一个A ...

  8. C语言指针基本操作

    C语言指针基本操作 指针  指针介绍 如果说C语言最有魅力的地方在哪,那么毋庸置疑,非指针莫属了. 众所周知,C语言中每个变量都有一个内存地址,可以通过&进行访问.指针是一个变量,它的值是一个 ...

  9. C语言链表结构体(学习笔记)

    #include <stdio.h> #define LENTEST 100 // 采取逐步删除的方法求的素数 //先假设1-100都是素数,然后剔除2的倍数, //3的倍数,直到剔除所有 ...

随机推荐

  1. LVS负载均衡DR模式部署

    目录: 1. 拓扑图 2. 搭建环境 3. LVS服务器部署 4. 测试 1. 拓扑图     LVS-DR模式采的IP地址全部为外网IP.    本例中IP的设置全部采用临时设置IP的方式,重启后会 ...

  2. 快排,归并和Shell排序

    快速排序 快速排序的执行流程: (1) 先从数列中取出一个数作为基准数. (2) 将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. (3)再对左右区间重复第二步,直到各区间只有一个数. ...

  3. 有序列表ol和定义列表dl,dt,dd

    有序列表是一种讲究排序列表结构,使用<ol>标签定义,其中包含多个<li>列表项目.一般网页设计中,列表结构可以互用有序或者无序类表标签.但是,在强调项目排序栏目中,选用有序列 ...

  4. SQL存储过程基础语法及实例

    1.定义变量简单赋值 declare @a int //声明一个变量a 赋初值为5 print @a //输出变量a 2.创建临时表 if OBJECT_ID('tempdb.#FlightState ...

  5. Ajax 学习(一)

    此篇为学习笔记 概述 Ajax(Asynchronous Javascrpt And Xml)是一种运用于浏览器的技术,它可以在浏览器与服务器之间使用异步通信机制进行数据通信,从而允许浏览器向服务器获 ...

  6. [Linux] Linux系统(进程管理)

    进程:当我们运行程序时,Linux会为程序创建一个特殊的环境,包含程序运行的所有资源,这个环境就称为进程 前台进程:一般我们使用一些命令,都属于前台进程,直接输出结果到显示器 后台进程:在命令的末尾加 ...

  7. Java基础教程(21)--泛型

    一.为什么使用泛型   泛型意味着编写的代码可以被很多不同类型的对象所重用.例如,我们不希望为存放String和Integer对象的集合设计不同的类.现在的ArrayList类可以存放任何类型的对象, ...

  8. CentOS系统下安装SVN及常用命令

    1.SVN的安装: yum install subversion 2.服务端命令 svnserver -- 控制svn系统服务的启动等 svnadmin -- 版本库的创建.导出.导入.删除等 svn ...

  9. javascript面向对象的常见写法与优缺点

    我们通过表单验证的功能,来逐步演进面向对象的方式.   对于刚刚接触javascript的朋友来说,如果要写一个验证用户名,密码,邮箱的功能, 一般可能会这么写: //表单验证 var checkUs ...

  10. Django基础五之django模型层(一)单表操作

    一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...