some code of c
//
// main.c
// LineList
//
// Created by Rubert on 16/9/11.
// Copyright © 2016年 Study. All rights reserved.
// #include <stdio.h>
//定义链表数据结构
struct node
{
int num;
struct node *next;
struct node *prior; };
//函数声明
struct node *create();
void print();
void linkedList();
void headInsertLinkedList();
void tailInsertLinkedList();
void findLinkedList();
void insertLinkedList();
void deleteLinkedList();
void circleInsertLinkedList();
void doubleInsertLinkedList();
int main(int argc, const char * argv[]) {
// insert code here...
//headInsertLinkedList();
//tailInsertLinkedList();
//findLinkedList();
//insertLinkedList();
//deleteLinkedList();
//circleInsertLinkedList();
doubleInsertLinkedList();
return ;
} /*
* 头插入法创建链表
*/
void headInsertLinkedList() {
struct node *head = NULL;
struct node *p1;
for(int i = ; i < ; i ++) {
p1 = (struct node*)malloc(sizeof(struct node));
p1 -> num = i;
p1 -> next = head;
head = p1;
}
print(head);
} /*
* 尾插入法创建链表
*/
void tailInsertLinkedList() {
struct node *head = NULL;
struct node *p1,*p2;
p1 = p2 = (struct node*)malloc(sizeof(struct node));
for(int i = ; i < ; i ++) {
if(head == NULL) {
head = p1;
} else {
p2 -> next = p1;
}
p2 = p1;
p1 = (struct node*)malloc(sizeof(struct node));
p1->num = i;
}
print(head);
} /**
* 创建循环链表
*/
void circleInsertLinkedList() {
struct node *head = NULL;
struct node *p1,*p2;
p1 = p2 = (struct node*)malloc(sizeof(struct node));
for(int i = ; i < ; i ++) {
if(head == NULL) {
head = p1;
} else { if(i == ) {
p1->next = head;
}
p2 -> next = p1;
}
p2 = p1;
p1 = (struct node*)malloc(sizeof(struct node));
p1->num = i; }
print(head);
} /**
* 创建双向链表
*/
void doubleInsertLinkedList() {
struct node *head = NULL;
struct node *p1,*p2;
p1 = p2 = (struct node*)malloc(sizeof(struct node));
for(int i = ; i < ; i ++) {
if(head == NULL) {
head = p1;
} else {
/*if(i == 9) {
p1->next = head;
}*/
p2 -> next = p1;
p1 -> prior = p2;
}
p2 = p1;
p1 = (struct node*)malloc(sizeof(struct node));
p1->num = i; }
print(head);
} /*
* 链表查找
*/
void findLinkedList() { struct node *head = NULL;
struct node *p1;
for(int i = ; i < ; i ++) {
p1 = (struct node*)malloc(sizeof(struct node));
p1 -> num = i;
p1 -> next = head;
head = p1;
} struct node *p;
p = head -> next;
int j = ;
int i = ;
while(p !=NULL && j < i)
{
p = p->next;
++j;
}
printf("%6d %d %d\n",p->num, p, p->next);/*输出链表节点的值*/
} /*
* 链表中插入
*/ void insertLinkedList() { struct node *head = NULL;
struct node *p1;
for(int i = ; i < ; i ++) {
p1 = (struct node*)malloc(sizeof(struct node));
p1 -> num = i;
p1 -> next = head;
head = p1;
} struct node *p,*m;
p = head;
int j = ;
int i = ;
while(p !=NULL && j < i-)
{
p = p->next;
++j;
} if(p == NULL) {
printf("error");
} else {
m = (struct node*)malloc(sizeof(struct node));
m->num = j;
m->next = p -> next;
p->next = m;
} print(head); } /*
* 链表中删除
*/ void deleteLinkedList() { struct node *head = NULL;
struct node *p1;
for(int i = ; i < ; i ++) {
p1 = (struct node*)malloc(sizeof(struct node));
p1 -> num = i;
p1 -> next = head;
head = p1;
} struct node *p,*m;
p = head;
int j = ;
int i = ;
while(p !=NULL && j < i-)
{
p = p->next;
++j;
} if(p == NULL) {
printf("error");
} else {
//m = (struct node*)malloc(sizeof(struct node));
//m->num = j;
//m->next = p -> next;
p->next = p->next->next; } print(head); } /*
* sample 1
*/
void linkedList()
{
struct node *head;
head = NULL;//创建一个空表
head = create(head); /* 创建单链表 */
print(head);/* 打印单链表 */ } struct node *create(struct node *head) //返回的是与节点相同类型的指针
{
struct node *p1,*p2;
int i = ;
//利用malloc() 函数向系统申请分配一个节点
p1 = p2 = (struct node*)malloc(sizeof(struct node));//新节点
printf("请输入值,值小于等于0结束,值存放地址为:p1_ADDR= %d\n",p1);
scanf("%d",&p1->num);/*输入节点的值*/
p1->next=NULL;/*将新节点的指针置为空*/
while(p1->num > )/*输入节点的数值大于0*/
{
//④将新节点的指针成员赋值为空。若是空表,将新节点连接到表头;若是非空表,将新节点接到表尾;
if(head == NULL)
head = p1;/*空表,接入表头*/
else
p2->next = p1;/*非空表,接到表尾*/
p2 = p1; p1 = (struct node*)malloc(sizeof(struct node));/*下一个新节点*/
i = i+;
printf("请输入值,值小于等于0结束,值存放地址为:p%d_ADDR= %d\n",i,p2);
scanf("%d",&p1->num);/*输入节点的值*/
//⑤判断一下是否有后续节点要接入链表,若有转到3 ),否则结束;
}
//==============原来程序更正部分:(多谢@daling_datou提醒)================================
//free(p1); //申请到的没录入,所以释放掉
p1 = NULL; //使指向空
p2->next = NULL; //到表尾了,指向空
printf("链表输入结束(END)\n");
//==============================================
return head;
} void print(struct node *head)/*出以head为头的链表各节点的值*/
{
struct node *temp;
temp = head;/*取得链表的头指针*/ printf("\n\n\n链表存入的值为:\n");
while(temp != NULL)/*只要是非空表*/
{
printf("%6d %d %d %d\n",temp->num, temp, temp->next, temp->prior);/*输出链表节点的值*/
temp = temp->next;/*跟踪链表增长*/
}
printf("链表打印结束!!");
}
some code of c的更多相关文章
- Visual Studio Code 代理设置
Visual Studio Code (简称 VS Code)是由微软研发的一款免费.开源的跨平台文本(代码)编辑器,在十多年的编程经历中,我使用过非常多的的代码编辑器(包括 IDE),例如 Fron ...
- 我们是怎么做Code Review的
前几天看了<Code Review 程序员的寄望与哀伤>,想到我们团队开展Code Review也有2年了,结果还算比较满意,有些经验应该可以和大家一起分享.探讨.我们为什么要推行Code ...
- Code Review 程序员的寄望与哀伤
一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...
- 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM
刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...
- 在Visual Studio Code中配置GO开发环境
一.GO语言安装 详情查看:GO语言下载.安装.配置 二.GoLang插件介绍 对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github ...
- 代码的坏味道(14)——重复代码(Duplicate Code)
坏味道--重复代码(Duplicate Code) 重复代码堪称为代码坏味道之首.消除重复代码总是有利无害的. 特征 两个代码片段看上去几乎一样. 问题原因 重复代码通常发生在多个程序员同时在同一程序 ...
- http status code
属于转载 http status code:200:成功,服务器已成功处理了请求,通常这表示服务器提供了请求的网页 404:未找到,服务器未找到 201-206都表示服务器成功处理了请求的状态代码,说 ...
- Visual Studio Code——Angular2 Hello World 之 2.0
最近看到一篇用Visual Studio Code开发Angular2的文章,也是一篇入门教程,地址为:使用Visual Studio Code開發Angular 2專案.这里按部就班的做了一遍,感觉 ...
- WebStorm 2016 最新版激活(activation code方式)
WebStorm 2016 最新版激活(activation code方式) WebStorm activation code WebStorm 最新版本激活方式: 今天下载最新版本的WebStorm ...
- docker4dotnet #3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用
.net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对岸的苹果园越来越茂盛,实在不想再去做一只宅猿了.于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去看 ...
随机推荐
- com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte UTF-8 sequence报错解决方法
添加了XML实体和表映射文件后,莫名报错,百思不得其解,也找不到哪里错了,后来把mybatis-config.xml文件中去掉中文注释就好了 mybatis-config.xml文件中的内容如下,去掉 ...
- sqlite实现oracle的rownum功能
SELECT (SELECT COUNT(*) FROM [table] AS t2 WHERE t2.name <= t1.name) AS rowNum, id, name FROM [ta ...
- LaTeX_fleqn参数时,多行公式对齐居中的同时选择性的加编号
[转载请注明出处]http://www.cnblogs.com/mashiqi 2016/10/20 一年多没写博文了.今天写一个短的,记录一下使用LaTeX的一些经验. 有些时候,我们的latex文 ...
- MySQL 重装
由于之前第一次装MySQL,默认的datadir在启动盘中,我想要将datadir移动到更大的存储盘中.无奈网上的各种文章的方法在我这里总是不work.我决定重新用homebrew来装一遍MySQL. ...
- SqlServer 触发器
--创建insert类型的触发器create trigger tgr_product_insert --创建触发器 on product --所针对的表 for insert --触发 ...
- MyEclipse JAX-WS Web Service
在Myeclipse8.5下开发Web service程序,目前系统支持的开发框架有3个,JAX-WS,REST(JAX-RS),XFire.其中系统建议不要使用XFire 的框架,可能是要被淘汰了( ...
- DOCTYPE声明的作用是什么?严格模式与混杂模式如何区分?
HTML语言已经存在太久了,目前必然会有一些不同版本的文档存在,为了能够让浏览器清楚你的文档的版本类型和风格,需要在文档的起始用DOCTYPE声明制定当前文档的版本和风格.如果在网页中提供了版本信息, ...
- java IO基础操作
java IO基础,通熟易懂,好久没复习java 基础了.这里是传送门... http://www.cnblogs.com/nerxious/archive/2012/12/15/2818848.ht ...
- HTML5获取地理位置
包含了以下功能:(1)通过IP地址获取城市地址(并不完全准确,存在代理IP或IP中转时定位与实际位置不一致的情况)(2)通过移动端浏览器及GPS定位位置坐标(3)根据位置坐标转换百度地图坐标(4)根据 ...
- const成员变量初始化总结
const可以用来声明常量也就是说他的值不能被修改: const成员必须在定义的时候同时初始化,不能进行赋值 如 const int a:a的值不能修改,不能给它赋值,如何才能让它一开始就拥有一个值? ...