转贴:C语言链表基本操作
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语言链表基本操作的更多相关文章
- ZT C语言链表操作(新增单向链表的逆序建立)
这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html ZT 链表逆序http://www.cnblogs.com/ ...
- c++学习笔记—单链表基本操作的实现
用c++语言实现的单链表基本操作,包括单链表的创建(包括头插法和尾插法建表).结点的查找.删除.排序.打印输出.逆置.链表销毁等基本操作. IDE:vs2013 具体实现代码如下: #include ...
- C语言SQLite3基本操作Demo
/************************************************************************** * C语言SQLite3基本操作Demo * 声 ...
- C语言链表实例--玩转链表
下图为最一简单链表的示意图: 第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量.以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,姓名 n ...
- C语言 链表
原文:C语言 链表 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将要实现19个功能. ...
- C语言链表操作模板(添加,删除,遍历,排序)
C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...
- Java链表基本操作和Java.util.ArrayList
Java链表基本操作和Java.util.ArrayList 今天做了一道<剑指offer>上的一道编程题“从尾到头打印链表”,具体要求如下:输入一个链表,按链表值从尾到头的顺序返回一个A ...
- C语言指针基本操作
C语言指针基本操作 指针 指针介绍 如果说C语言最有魅力的地方在哪,那么毋庸置疑,非指针莫属了. 众所周知,C语言中每个变量都有一个内存地址,可以通过&进行访问.指针是一个变量,它的值是一个 ...
- C语言链表结构体(学习笔记)
#include <stdio.h> #define LENTEST 100 // 采取逐步删除的方法求的素数 //先假设1-100都是素数,然后剔除2的倍数, //3的倍数,直到剔除所有 ...
随机推荐
- Node.js HTTP Server对象及GET、POST请求
上一博客学习了请求与响应,2次读2次写,但有一个问题就是客户端写入的时候怎么知道请求到达.所以HTTP Server对象出现了.它提供了实现HTTP服务器的基本框架.它可以监听端口的底层套接字和接收请 ...
- 【WePY小程序框架实战一】-创建项目
最近两个小程序项目使用了微信自己出的框架wepy开发,开发完的感受就是比原生小程序顺溜很多.我就从安装到一些重点和整个项目把wepy使用整理下 全局安装WePY命令行工具 npm install we ...
- [转]9.2.3 .net core 通过TagHelper封装控件
本文转自:https://www.cnblogs.com/BenDan2002/p/6170624.html .net core 除了继续保留.net framework的HtmlHelper的写法以 ...
- 域名(Domain Name)
是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置,地理上的域名,指代有行政自主权的一个地方区域). 域名是一个IP地址 ...
- SVN版本控制——SVN 合并的六种方式
合并的工作是把主干或者分支上合并范围内的所有改动列出,并对比当前工作副本的内容,由合并者手工修改冲突,然后提交到服务器的相应目录里.如果当前工作副本是主干,则合并的范围是分支上的改动,如果工作副本是分 ...
- 十七、curator recipes之DistributedPriorityQueue
简介 官方文档:http://curator.apache.org/curator-recipes/distributed-priority-queue.html javaDoc:http://cur ...
- Redis到底是多线程还是单线程?线程安全吗
redis是单线程,线程安全 redis可以能够快速执行的原因: (1) 绝大部分请求是纯粹的内存操作(非常快速)(2) 采用单线程,避免了不必要的上下文切换和竞争条件(3) 非阻塞IO - IO多路 ...
- centos7下安装sublime text3并配置环境变量
注意:我解压完把sublime_text全改成了sublime,如果未改就是sublime_text 1.官网下载sublime,保存到指定目录,例如/home 2.解压 tar xjf sublim ...
- [合集]解决Python报错:local variable 'xxx' referenced before assignment
a = 1 def use(): print(a) #输出1 引用不会报错 a = 1 def use(): a = 3 print(a) #输出 3 重新赋值也不会报错. 局部变量会优先在函数内部去 ...
- Git 学习之git 起步(一)
起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...