C语言链表实现
#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h" typedef struct _Teacher
{
int age;
struct _Teacher *next;
}Teacher; Teacher* create_teacher();
int print_teacher(Teacher * pHeader);
int add_teacher(Teacher * pHeader, int x, int y);
int del_teacher(Teacher *pHeader, int x);
int reverse_teacher(Teacher *pHeader);
int free_teacher(Teacher *pHeader); //创建链表
Teacher* create_teacher()
{
Teacher* pHeader = (Teacher*)malloc(sizeof(Teacher));
if (pHeader == NULL)
{
printf("err:malloc pheader err");
return NULL;
}
Teacher* pCur = NULL;
pCur = pHeader; pHeader->age = ;
pHeader->next = NULL;
int i = ;
while ()
{
printf("please enter your age:");
scanf("%d", &i);
if (i == -)
{
break;
}
Teacher* temp = (Teacher*)malloc(sizeof(Teacher));
if (temp == NULL)
{
free_teacher(pHeader);
return -;
}
temp->age = i;
temp->next = NULL; pCur->next = temp;
pCur = temp; }
return pHeader;
}
//读取链表
int print_teacher(Teacher * pHeader)
{
if (pHeader == NULL)
{
printf("err print_teacher:pHeader=NULL");
return -;
}
Teacher * pCur = pHeader->next; while (pCur)
{
printf("%d ", pCur->age);
pCur = pCur->next;
} }
//在age=x前面插入y,没有则插入到最后
int add_teacher(Teacher * pHeader, int x, int y)
{
if (pHeader == NULL)
{
printf("err add_teacher:pHeader=NULL");
return -;
}
Teacher * pM = (Teacher *)malloc(sizeof(Teacher));
if (pM == NULL)
{
free_teacher(pHeader);
return -;
}
pM->age = y;
Teacher *pPre = NULL, *pCur = NULL;
pPre = pHeader;
pCur = pPre->next; while (pCur != NULL)
{
if (pCur->age == x)
{
break;
} pPre = pCur;
pCur = pCur->next; }
pM->next = pCur;
pPre->next = pM; }
//删除链表节点
int del_teacher(Teacher *pHeader, int x)
{
if (pHeader == NULL)
{
printf("err del_teacher:pheader==NULL");
return -; }
Teacher *delT = NULL;
Teacher *pPre = pHeader;
Teacher *pCur = pHeader->next;
while (pCur != NULL)
{
if (pCur->age == x)
{
delT = pCur;
break;
}
pPre = pCur;
pCur = pCur->next; }
if (delT == NULL)
{
printf("\nnot found age=%d\n", x);
return ;
}
pPre->next = pCur->next;
free(delT);
return ; }
//释放内存
int free_teacher(Teacher *pHeader)
{
Teacher *pCur = pHeader;
Teacher *next = pCur->next;
while (pCur != NULL)
{
next = pCur->next;
free(pCur);
pCur = next;
}
return ;
}
//逆向链表
int reverse_teacher(Teacher *pHeader)
{
if (pHeader == NULL)
{
printf("err del_teacher:pheader==NULL");
return -; }
if (pHeader->next == NULL || pHeader->next->next == NULL)
{
return ;
}
Teacher * pPre = pHeader->next, *pCur = pHeader->next->next,*temp =NULL;
pPre->next = NULL;
while (pCur != NULL)
{
temp = pCur->next; pCur->next = pPre; pPre = pCur; pCur = temp; } pHeader->next = pPre;
return ; }
void main()
{
Teacher * pHeader = NULL;
pHeader = create_teacher();
int res = ;
if (pHeader == NULL)
{
printf("err create_teacher");
return; }
res = print_teacher(pHeader);
if(res==-1)
{
printf("err print_teacher");
return;
} //res = add_teacher(pHeader, 20, 19); //res = print_teacher(pHeader); //res = del_teacher(pHeader, 20); //res = print_teacher(pHeader);
res =reverse_teacher(pHeader); res = print_teacher(pHeader);
res = free_teacher(pHeader); system("pause"); }
C语言链表实现的更多相关文章
- C语言 链表
原文:C语言 链表 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将要实现19个功能. ...
- C语言链表操作模板(添加,删除,遍历,排序)
C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...
- ZT C语言链表操作(新增单向链表的逆序建立)
这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html ZT 链表逆序http://www.cnblogs.com/ ...
- C语言链表结构体(学习笔记)
#include <stdio.h> #define LENTEST 100 // 采取逐步删除的方法求的素数 //先假设1-100都是素数,然后剔除2的倍数, //3的倍数,直到剔除所有 ...
- C语言链表实例--玩转链表
下图为最一简单链表的示意图: 第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量.以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,姓名 n ...
- c语言-链表VS数组
数组和链表的区别 数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素.但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要 ...
- 再次复习数据结构:c语言链表的简单操作
最近呢,又要面临多次的数据结构与算法方面的试题了,而我呢,大概也重新温习c语言的基本要点快一个月了,主要是针对指针这货的角度在研究c语言,感觉又学到了不少. 现在c指针感觉知道点了,也就匆忙开展数据结 ...
- [数据结构]C语言链表实现
我学数据结构的时候也是感觉很困难,当我学完后我发现了之所以困难时因为我没有系统的进行学习,而且很多教授都只是注重数据结构思想,而忽略了代码方面,为此我写了这些博文给那些试图自学数据结构的朋友,希望你们 ...
- [C语言]链表实现贪吃蛇及部分模块优化
在继上篇[C语言]贪吃蛇_结构数组实现大半年后,链表实现的版本也终于出炉了.两篇隔了这么久除了是懒癌晚期的原因外,对整个游戏流程的改进,模块的精简也花了一些时间(都是借口). 优化模块的前沿链接: · ...
- 玩转C语言链表-链表各类操作详解
链表概述 链表是一种常见的重要的数据结构.它是动态地进行存储分配的一种结构.它可以根据需要开辟内存单元.链表有一个"头指针"变量,以head表示,它存放一个地址.该地址指向一个元素 ...
随机推荐
- vim中将tab 设置成4个空格
在.vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:set ts=4 (注:ts是tabstop的缩写,设TAB宽4个空格)set expandtab 对于已保存的文件,可以使用 ...
- bzoj1176
题解: 和上一题差不多 就加上一个初始值 代码: #include<bits/stdc++.h> ; using namespace std; int n,m,cnt,s,sum[N],a ...
- iOS多线程GCD详解
在这之前,一直有个疑问就是:gcd的系统管理多线程的概念,如果你看到gcd管理多线程你肯定也有这样的疑问,就是:并发队列怎么回事,即是队列(先进先出)怎么会并发,本人郁闷了好久,才发现其实cgd管理多 ...
- ES6学习一 JS语言增强篇
一 背景 JavaScript经过二十来年年的发展,由最初简单的交互脚本语言,发展到今天的富客户端交互,后端服务器处理,跨平台(Native),以及小程序等等的应用.JS的角色越来越重要,处理场景越来 ...
- IE兼容BUG汇总及解决方案(持续更新)
本篇为总结开发过程当中遇到的各种IE兼容性的小问题,比较复杂的会单开一篇文章来讲解. 另:我手头目前只有原生IE8,原生IE9,原生IE11,以及IE11模拟的IE5,7,8,9,10.因IE6太过古 ...
- Date、DateFormat、SimpleDateFormat、Calendar
package com.Date; import java.util.Date; /* * Date 表示特定的瞬间,精确到毫秒 * JDK1.0开始 * 构造方法(常用的方法,过时的不管): * D ...
- java-IO-基本输出输入流
/ 标准输入输出流: 直接类名调用 一经创建无法改变 public static final PrintStream err “标准”错误输出流. public static final InputS ...
- 浏览器的get请求和post请求的区别
GET 请求和 POST 请求: 1). 使用GET方式传递参数: ①. 在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为 ...
- ubuntu16 Intellij Idea Install&config
1,下载idea二进制文件,有免费和不免费的. https://www.jetbrains.com/idea/download/#section=linux 2,解压下载文件. tar -xvzf . ...
- DELL E7240超极本
一.图片展示 1.整体图 2.扩展坞的后卡槽附带挡板 3.电源线 4.边框指示灯 5.平躺展示摄像头 二.参数配置 1.i5的 2.i7的 3.手写 处理器:英特尔四代处理器 i7-4600U双 ...