1.链表的插入//插入一个确定得数
#include<stdio.h>
#include<stdlib.h>
struct node
{int data;struct node *next;
};
int main(void)
{int n,i,j,k;scanf("%d",&n);struct node *head,*p,*q,*t;head=NULL;while(n--){scanf("%d",&k);p=(struct node *)malloc(sizeof(struct node));p->data=k;p->next=NULL;if(head==NULL){head=p;}else{q->next=p;}q=p;}scanf("%d",&k);/相比于链表的创建只是多了这一部分代码p=(struct node *)malloc(sizeof(struct node));p->data=k;t=head;while(t!=NULL){if(t->next->data>k){p->next=t->next;/这两行代码顺序顺序相当重要t->next=p;//新结点的下个指向指向大于插入数的地址,t的下个指向被p取代break;/相当重要,不能忘记,没有它无法输出}}t=head;while(t!=NULL){printf("%d\t",t->data);t=t->next;}
}
2,在第几个数后插入
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct node
{int data;struct node *next;
}NODE;
NODE *creat(int n)
{int a;NODE *head,*p,*q;head=NULL;while(n--){scanf("%d",&a);p=(NODE *)malloc(sizeof(NODE));p->data=a;p->next=NULL;if(head==NULL){head=p;}else{q->next=p;}q=p;}return head;
}
NODE *charu(NODE *head,int a)
{NODE *p,*q;int i,j,b;scanf("%d",&b);p=(NODE *)malloc(sizeof(NODE));p->data=b;q=head;//相当重要,保存头结点,if(a==1){p->next=head;return p;} for(i=1;i<a-1;i++){head=head->next;//head=第a个结点的上一个结点}p->next=head->next;head->next=p;return q;
}
int main(void)
{int i,a,n;scanf("%d",&n);NODE *head;head=creat(n);scanf("%d",&a);head=charu(head,a);while(head!=NULL){printf("%d ",head->data);head=head->next;}
}
3.链表的删除//删除第i个数
NODE *shanchu(NODE *head,int a)//代入上面的charu函数即可
{NODE *p,*q;int i;p=head;q=head;if(a==1){head=head->next;return head;} for(i = 1; i < a - 1; i++){p = p->next;}q = p->next;p->next = q->next;free(q);return head;
}
4,链表的排序///冒泡排序//交换值
/*首先将两个结点都设置为空,当内循环走到begin->next=NULL时, 令end=begin,则外循环减少一次,最后一个结点不比较,令begin=head,每次都从表头开始比较。*/
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{int data;struct node *next;
}NODE;
NODE *create(int n)
{int i,j;NODE *head,*p;head=(NODE *)malloc(sizeof(NODE));head->next=NULL;for(i=0;i<n;i++){scanf("%d",&j);p=(NODE *)malloc(sizeof(NODE));p->data=j;p->next=head->next;head->next=p;}return head;
}
NODE *paixu(NODE *head)
{int x;NODE *begin,*end,*p;begin=head;end=NULL;while(begin!=end){while(begin->next!=end)//遍历到end前一个{if(begin->data>begin->next->data){x=begin->data;begin->data=begin->next->data;begin->next->data=x;}begin=begin->next;//begin指向下一个结点} end=begin;//很重要,已经比好的最后一个结点不比较begin=head;外循环仍从头开始遍历}return begin;
}
int main(void)
{int n;NODE *head;scanf("%d",&n);head=create(n);head=paixu(head);while(head->next!=NULL)//因为是用头插法做的,头结点未赋值用->next{printf("%d ",head->data);head=head->next;}
}
5,链表的添加//不难理解,不解释
#include<stdio.h>
#include<stdlib.h>
int s;
typedef struct node
{int data;struct node *next;
}NODE;
NODE *create(int n)
{int i,j;NODE *head,*p;head=(NODE *)malloc(sizeof(NODE));head->next=NULL;for(i=0;i<n;i++){scanf("%d",&j);p=(NODE *)malloc(sizeof(NODE));p->data=j;p->next=head->next;head->next=p;}return head;
}
NODE *tianjia(NODE *head)
{int i,a;scanf("%d",&s);scanf("%d",&a);NODE *p,*q;q=head;p=(NODE *)malloc(sizeof(NODE));p->data=a;if(s==1){p->next=head->next;return p;  }else{for(i=1;i<s;i++){head=head->next;}p->next=head->next;head->next=p;}return q;
}
int main(void)
{int n;NODE *head;scanf("%d",&n);head=create(n);head=tianjia(head);if(s!=1)head=head->next;while(head!=NULL){printf("%d ",head->data);head=head->next;}
}

链表还有很多东西没有涉及到,后面还得好好学~~~

C语言---链表的基本应用相关推荐

  1. [转载 整理]C语言链表实例

    C语言链表有单链表.双向链表.循环链表.单链表由数据域和指针域组成,数据域存放数据,指针域存放该数据类型的指针便于找到下一个节点.双链表则含有头指针域.数据域和尾指针域,域单链表不同,双链表可以从后一 ...

  2. C 语言链表其他实现

    C 语言链表其他实现 #include<stdio.h> #include<stdlib.h> #define N 10typedef struct list{int data ...

  3. C 语言 链表的创建与打印

    C 语言 链表的创建与打印 /* 包含的头文件 */#include <stdio.h>#include <stdlib.h>/* 定义一个表示链表的结构体指针 */struc ...

  4. C语言链表返回第n个到最后的节点的算法(附完整源码)

    C语言链表返回第n个到最后的节点的算法 C语言链表返回第n个到最后的节点的算法完整源码(定义,实现,main函数测试) C语言链表返回第n个到最后的节点的算法完整源码(定义,实现,main函数测试) ...

  5. C语言链表返回具有的回文序列的算法(附完整源码)

    C语言链表返回具有的回文序列的算法 C语言链表返回具有的回文序列的算法完整源码(定义,实现,main函数测试) C语言链表返回具有的回文序列的算法完整源码(定义,实现,main函数测试) #inclu ...

  6. C语言链表是否为循环表的算法(附完整源码)

    C语言链表是否为循环表的算法 C语言链表是否为循环表的算法完整源码(定义,实现,main函数测试) C语言链表是否为循环表的算法完整源码(定义,实现,main函数测试) #include <io ...

  7. C语言 | 链表概述

    C语言链表概述 链表是一种常见的重要的数据结构.它是动态地进行存储分配的一种结构,是根据需要开辟内存单元. 链表有一个"头指针"变量,它存放一个地址,该地址指向一个元素. 链表中每 ...

  8. c语言链表写贪吃蛇思路,C语言构建的链表贪吃蛇

    用C语言链表写的贪吃蛇(程序设计时做的,做的不好大佬勿喷) 借助游戏内容分析贪吃蛇所需的功能主要包括这几块: 移动光标模块 打印地图模块和基本规则信息 读取最高分文件 打印初始蛇模块 打印时给予蛇的初 ...

  9. java用链表做学生系统_C语言链表实现学生管理系统

    本文实例为大家分享了C语言链表实现学生管理系统的具体代码,供大家参考,具体内容如下 #include #include #include #include #include #include usin ...

  10. c语言链表集合求并集用字母表示,c语言实现的链表集合的并集与交集

    c语言,链表,集合求并集,交集 #include #include typedefintDatatype; //定义链表的节点 typedefstructLNode{ Datatype data; L ...

最新文章

  1. 记 fastjson泛型转对象 第一次可以正常转,第二次就变成JSONArray 问题
  2. Sprint(第十天11.23)
  3. 第一篇:web之前端之html
  4. 文巾解题 1877. 数组中最大数对和的最小值
  5. 读取速度贼快的省市区地址库
  6. python循环五要素_python常见单词在手,编程入门不愁
  7. 51CTO的技术门诊谈OSSIM
  8. flutter --- 使用dio包
  9. C# Hashtable和Dictionary区别
  10. php 企业邮箱,PHPMailer可能被全球邮(企业邮箱提供)拉黑
  11. MATLAB矩阵添加新元素
  12. 去年购房者平均年龄为29.5岁 80后家庭人均居住面积最小
  13. Python高级编专题 - 类的创建与销毁
  14. `ifdef、`else、`endif 用法
  15. cmd创建一个用户并升级成管理员
  16. 不虚此行!OpenStack 温哥华峰会参会分享值得收藏
  17. java学习笔记day14—HTML
  18. 织梦采集侠教程设置免费版本
  19. 手把手会教你搭建微信小程序服务器node!!!
  20. 巧妙突破大容量邮箱附件大小限制(zz)

热门文章

  1. ubuntu设置PATH
  2. 2010-04-01 4over6tunnel配置——折腾了一天
  3. 避免从单体到分布式单体
  4. linux tomcat PermGen space
  5. 源码剖析 Netty 服务启动 NIO
  6. 面试必问: Spring IOC
  7. ASP.NET五大核心对象解析
  8. Python精通-Python列表操作
  9. SpringBoot与日志slf4j使用原理
  10. python设计模式17-中介者模式