C语言---链表的基本应用
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语言---链表的基本应用相关推荐
- [转载 整理]C语言链表实例
C语言链表有单链表.双向链表.循环链表.单链表由数据域和指针域组成,数据域存放数据,指针域存放该数据类型的指针便于找到下一个节点.双链表则含有头指针域.数据域和尾指针域,域单链表不同,双链表可以从后一 ...
- C 语言链表其他实现
C 语言链表其他实现 #include<stdio.h> #include<stdlib.h> #define N 10typedef struct list{int data ...
- C 语言 链表的创建与打印
C 语言 链表的创建与打印 /* 包含的头文件 */#include <stdio.h>#include <stdlib.h>/* 定义一个表示链表的结构体指针 */struc ...
- C语言链表返回第n个到最后的节点的算法(附完整源码)
C语言链表返回第n个到最后的节点的算法 C语言链表返回第n个到最后的节点的算法完整源码(定义,实现,main函数测试) C语言链表返回第n个到最后的节点的算法完整源码(定义,实现,main函数测试) ...
- C语言链表返回具有的回文序列的算法(附完整源码)
C语言链表返回具有的回文序列的算法 C语言链表返回具有的回文序列的算法完整源码(定义,实现,main函数测试) C语言链表返回具有的回文序列的算法完整源码(定义,实现,main函数测试) #inclu ...
- C语言链表是否为循环表的算法(附完整源码)
C语言链表是否为循环表的算法 C语言链表是否为循环表的算法完整源码(定义,实现,main函数测试) C语言链表是否为循环表的算法完整源码(定义,实现,main函数测试) #include <io ...
- C语言 | 链表概述
C语言链表概述 链表是一种常见的重要的数据结构.它是动态地进行存储分配的一种结构,是根据需要开辟内存单元. 链表有一个"头指针"变量,它存放一个地址,该地址指向一个元素. 链表中每 ...
- c语言链表写贪吃蛇思路,C语言构建的链表贪吃蛇
用C语言链表写的贪吃蛇(程序设计时做的,做的不好大佬勿喷) 借助游戏内容分析贪吃蛇所需的功能主要包括这几块: 移动光标模块 打印地图模块和基本规则信息 读取最高分文件 打印初始蛇模块 打印时给予蛇的初 ...
- java用链表做学生系统_C语言链表实现学生管理系统
本文实例为大家分享了C语言链表实现学生管理系统的具体代码,供大家参考,具体内容如下 #include #include #include #include #include #include usin ...
- c语言链表集合求并集用字母表示,c语言实现的链表集合的并集与交集
c语言,链表,集合求并集,交集 #include #include typedefintDatatype; //定义链表的节点 typedefstructLNode{ Datatype data; L ...
最新文章
- 记 fastjson泛型转对象 第一次可以正常转,第二次就变成JSONArray 问题
- Sprint(第十天11.23)
- 第一篇:web之前端之html
- 文巾解题 1877. 数组中最大数对和的最小值
- 读取速度贼快的省市区地址库
- python循环五要素_python常见单词在手,编程入门不愁
- 51CTO的技术门诊谈OSSIM
- flutter --- 使用dio包
- C# Hashtable和Dictionary区别
- php 企业邮箱,PHPMailer可能被全球邮(企业邮箱提供)拉黑
- MATLAB矩阵添加新元素
- 去年购房者平均年龄为29.5岁 80后家庭人均居住面积最小
- Python高级编专题 - 类的创建与销毁
- `ifdef、`else、`endif 用法
- cmd创建一个用户并升级成管理员
- 不虚此行!OpenStack 温哥华峰会参会分享值得收藏
- java学习笔记day14—HTML
- 织梦采集侠教程设置免费版本
- 手把手会教你搭建微信小程序服务器node!!!
- 巧妙突破大容量邮箱附件大小限制(zz)