ZT C语言链表操作(新增单向链表的逆序建立)
这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html
ZT 链表逆序http://www.cnblogs.com/jeanschen/p/3538966.html
C语言链表操作(新增单向链表的逆序建立)
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct NODE
- {
- int e;
- struct NODE *next;
- }node, *LinkList;
- LinkList build_linklist()
- {
- FILE *fp;
- if ((fp=fopen("number.txt","r"))==NULL)
- {
- printf("Can not open the file!");
- exit (1);
- }
- int t;
- LinkList r,p,head=NULL;
- while (fscanf(fp,"%d",&t)>0)
- {
- p=(LinkList)malloc(sizeof(node));
- p->e=t;
- p->next=NULL;
- if (!head)
- head=p;
- else
- r->next=p;
- r=p;
- }
- return head;
- }
- void search(LinkList head,int toSearch)
- {
- int count=0;
- int flag=0;
- LinkList r=head;
- while (r!=NULL)
- {
- count++;
- if (r->e==toSearch)
- {
- printf("已经找到该元素,在第%d个位置\n",count);
- flag=1;
- break;
- }
- r=r->next;
- }
- if (!flag)
- printf("没有找到该元素!\n");
- }
- void del(LinkList *head,int toDel)
- {
- if (!(*head))
- {
- printf("请先创建链表!\n");
- return ;
- }
- LinkList r=*head;
- LinkList p=NULL;
- int flag=0;
- while (r!=NULL)
- {
- if ((r==*head)&&(r->e==toDel))
- {
- (*head)=(*head)->next;
- flag=1;
- break;
- }
- if ((r!=*head)&&(r->e==toDel))
- {
- flag=1;
- for (p=*head;p!=NULL;p=p->next)
- {
- if (p->next==r)
- {
- break;
- }
- }
- p->next=r->next;
- free(r);
- break;
- }
- r=r->next;
- }
- if (!flag)
- printf("未找到该元素!\n");
- }
- void insert(LinkList head,int n,int toInsert)
- {
- if (!head)
- {
- printf("请先创建链表!");
- return ;
- }
- int count=0;
- LinkList p=head;
- while (p!=NULL)
- {
- if ((count++)==n)
- {
- LinkList r=(LinkList)malloc(sizeof(node));
- r->e=toInsert;
- r->next=p->next;
- p->next=r;
- break;
- }
- p=p->next;
- }
- }
- int getLengh(LinkList head)
- {
- LinkList p=head;
- int i=0;
- while (p!=NULL)
- {
- i++;
- p=p->next;
- }
- return i;
- }
- void show(LinkList head)
- {
- LinkList p=head;
- while (p!=NULL)
- {
- printf("%d ",p->e);
- p=p->next;
- }
- printf("\n");
- }
- void rebuild(LinkList *head)
- {
- LinkList r,p;
- p=(*head)->next;
- r=p->next;
- (*head)->next=NULL;
- while(p!=NULL)
- {
- p->next=*head;
- *head=p;
- p=r;
- if (r==NULL)
- continue;
- else
- r=r->next;
- }
- }
- void sort_linklist(LinkList head)
- {
- LinkList r,p;
- int temp=0;
- for (r=head;r->next!=NULL;r=r->next)
- for (p=r->next;p!=NULL;p=p->next)
- if ((r->e)>(p->e))
- {
- temp=r->e;
- r->e=p->e;
- p->e=temp;
- }
- }
- int main()
- {
- LinkList head=build_linklist();
- printf("链表已建立!原链表:\n");
- show(head);
- sort_linklist(head);
- printf("链表已经按照从小到大的顺序排好!排序后:\n");
- show(head);
- printf("\n");
- int c=0;
- while (1)
- {
- printf("1.查找指定元素\n");
- printf("2.插入一个给定元素\n");
- printf("3.删除一个指定元素\n");
- printf("4.统计链表的长度\n");
- printf("5.输出线性链表\n");
- printf("6.实现安逆序链表的重建\n");
- printf("请选择:");
- scanf("%d",&c);
- switch (c)
- {
- case 1:
- {
- printf("请输入要查找的元素:");
- int t;
- scanf("%d",&t);
- search(head,t);
- printf("\n");
- break;
- }
- case 2:
- {
- printf("请输入要插入的元素的值:");
- int toi;
- scanf("%d",&toi);
- printf("请输入要插入的位置:");
- int position;
- scanf("%d",&position);
- insert(head,position,toi);
- printf("\n");
- break;
- }
- case 3:
- {
- printf("请输入要删除的元素的值:");
- int tod;
- scanf("%d",&tod);
- del(&head,tod);
- printf("\n");
- break;
- }
- case 4:
- {
- printf("链表的长度是:%d\n",getLengh(head));
- printf("\n");
- break;
- }
- case 5:
- {
- show(head);
- printf("\n");
- break;
- }
- case 6:
- {
- rebuild(&head);
- show(head);
- printf("\n");
- break;
- }
- default:
- {
- exit(0);
- }
- }
- }
- return 0;
- }
ZT C语言链表操作(新增单向链表的逆序建立)的更多相关文章
- 复习下C 链表操作(单向链表)
Object-C 作为C 的包装语言(运行时.消息机制).如果不熟悉C 的话实在玩得太肤浅. 随便深入oc 内部都会接触到C. runtime .GCD.Block.消息机制... 所有强大的功能无不 ...
- C语言链表:逆序建立单链表
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<malloc.h> #define LEN sizeof( ...
- SDUT OJ 数据结构实验之链表二:逆序建立链表
数据结构实验之链表二:逆序建立链表 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...
- 《程序员代码面试指南》第二章 链表问题 将单链表每K个节点之间逆序
样例 链表1-2-3-4-5-6-7-8-9-10 K=3 ,结果 3-2-1-6-5-4-9-8-7-10 java代码 /** * @Description:将单链表每K个节点之间逆序 * @Au ...
- SDUT-2117_数据结构实验之链表二:逆序建立链表
数据结构实验之链表二:逆序建立链表 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入整数个数N,再输入N个整数,按照 ...
- 复习下C 链表操作(单向循环链表、查找循环节点)
循环链表 稍复杂点. 肯能会有0 或 6 字型的单向循环链表. 接下来创建 单向循环链表 并 查找单向循环链表中的循环节点. 这里已6字型单向循环链表为例. //创建 循环链表 Student * ...
- C语言:创建动态单向链表,创建完成后,输出每一个节点的数据信息。
// // main.c // dynamic_link_list // // Created by ma c on 15/8/5. // Copyright (c) 2015. All ri ...
- C语言实现简单的单向链表(创建、插入、删除)及等效STL实现代码
实现个算法,懒得手写链表,于是用C++的forward_list,没有next()方法感觉很不好使,比如一个对单向链表的最简单功能要求: input: 1 2 5 3 4 output: 1-> ...
- JAVA 链表操作:单链表和双链表
主要讲述几点: 一.链表的简介 二.链表实现原理和必要性 三.单链表示例 四.双链表示例 一.链表的简介 链表是一种比较常用的数据结构,链表虽然保存比较复杂,但是在查询时候比较便捷,在多种计算机语言都 ...
随机推荐
- AE开发流程
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- asp后台读id设置样式
加runat=“server”
- jquery源码学习笔记(一)jQuery的无new构建
本人是一名.net程序员..... 你一个.net coder 看什么jQuery 源码啊? 原因吗,很简单.技多不压身吗(麻蛋,前端工作好高...羡慕). 我一直都很喜欢JavaScript,废话不 ...
- 微信小程序: 编译.wxss文件错误解决
博主最近又重新开始捡起微信小程序,想做点自己的东西.了解到最近小程序工具有做更新,就顺手更新了最新的版本,功能比之前强大了不少! 更新归更新,更新后控制台就一直报下面这个错误: 解决办法 有问题总 ...
- Eureka Server项目启动报错处理
Eureka Server项目启动报错处理 Eureka是一个服务发现组件,提供服务注册.发现等注册中心功能,使用spring boot启动eureka应用时出现报错: 20:36:17.646 [r ...
- [android] 手机卫士接收打电话广播显示号码归属地
使用广播接收者接收打电话的意图,显示号码归属地 新建一个类OutCallReceiver继承系统的BroadcastReceiver 重写onReceive()方法 调用getResultData() ...
- JAVA基础之——三大特征、接口和抽象类区别、重载和重写区别、==和equals区别、JAVA自动装箱和拆箱
1 java三大特征 1)封装:即class,把一类实体定义成类,该类有变量和方法. 2)继承:从已有的父类中派生出子类,子类实现父类的抽象方法. 3)多态:通过父类对象可以引用不同的子类,从而实现不 ...
- CSS流体(自适应)布局下宽度分离原则——张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1463 一.简短的前言 ...
- bae使用nodejs遇到的问题---‘Fix depends failed. Please check requirements.txt.’
今天尝试了百度开放云里面的nodejs云引擎,部署没有任何问题,修改文件后发现了发布不了,去查看发布设置发现了问题: Fix depends failed. Please check requirem ...
- vue图片上传及java存储图片(亲测可用)
1.前言 在使用elementui的upload组件时,我一直无法做到上传的图片和其他数据一起提交.单纯的上传文件,java的存储图片的方式也有局限性. 我知道的后端保存图片有两种方式:一种是直接存储 ...