C语言 链表基本函数
#include <stdio.h>
#include <malloc.h>
typedef struct my_node mynode;
struct my_node{
struct my_node *next;
int data;
};
void push_node(mynode **head,int data)
{
mynode *temp = *head;
if(*head == NULL)
{
*head = (mynode *)malloc(sizeof(mynode));
(*head) ->data = data;
(*head) ->next = NULL;
}
else
{
while(temp ->next != NULL)
temp = temp ->next;
temp ->next = (mynode *)malloc(sizeof(mynode));
temp ->next ->data = data;
temp ->next ->next = NULL;
}
}
void pop_node(mynode **head)
{
mynode *temp = *head, *prev;
while(temp ->next != NULL)
{
prev = temp;
temp = temp ->next;
}
free(prev ->next);
prev ->next = NULL;
}
void del_node(mynode **head,int index)
{
mynode *temp = *head, *tmp;
while(index -- != 1)
temp = temp ->next;
tmp = temp ->next;
temp ->next = temp ->next->next;
free(tmp);
}
void ins_node(mynode **head,int index,int data)
{
mynode *temp = *head, *tmp;
while(index -- != 1)
temp = temp ->next;
tmp = temp ->next;
temp ->next = NULL;
temp ->next = (mynode *)malloc(sizeof(mynode));
temp ->next ->next = tmp;
temp ->next ->data = data;
}
int find_data(mynode *head,int data)
{
mynode *temp = head;
int i =0;
while(temp ->next != NULL)
{
if(data == temp ->data)
return i;
temp = temp ->next;
i++;
}
return 0;
}
void back_ward(mynode **head)
{
mynode *now = *head, *temp, *prev;
while(now ->next != NULL)
{
temp = now->next;
if(now == *head)
now->next = NULL;
else
now ->next = prev;
prev = now;
now = temp;
}
now ->next = prev;
*head = now;
}
void sort_node(mynode **head)
{
mynode *curNode = (*head) ->next,*prevNode,*nextNode,*tempNode;
(*head) ->next =NULL;//有序节点尾为null
while(curNode != NULL)
{
tempNode = curNode->next;
if(curNode ->data > (*head) ->data)//大于头结点,新头结点
{
curNode->next = *head;
(*head) = curNode;
}
else
{
prevNode = *head;
nextNode = (*head) ->next;
while(nextNode != NULL && curNode ->data < nextNode->data) //定位需要插入的位置
{
prevNode = nextNode;
nextNode = nextNode ->next;
}
curNode ->next = prevNode ->next;
prevNode ->next =curNode;
}
curNode = tempNode;
}
}
int main()
{
mynode *head = NULL;
// head = (mynode *)malloc(sizeof(mynode));
// head ->data =10;
// head ->next = NULL;
push_node(&head,10);
push_node(&head,100);
push_node(&head,101);
push_node(&head,102);
push_node(&head,103);
pop_node(&head);
push_node(&head,103);
del_node(&head,2);
ins_node(&head,2,101);
find_data(head,102);
back_ward(&head);
back_ward(&head);
sort_node(&head);
return 0;
}
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语言]贪吃蛇_结构数组实现大半年后,链表实现的版本也终于出炉了.两篇隔了这么久除了是懒癌晚期的原因外,对整个游戏流程的改进,模块的精简也花了一些时间(都是借口). 优化模块的前沿链接: · ...
随机推荐
- (12/24) css进阶:sass文件的打包和分离
1.安装sass打包的loader 这里需要 在项目目录下用npm安装两个包.node-sass和sass-loader,(也可以使用cnpm安装) 因为sass-loader依赖于node-sass ...
- django 使用多个数据库
在django项目中, 一个工程中存在多个APP应用很常见. 有时候希望不同的APP连接不同的数据库,这个时候需要建立多个数据库连接. 参考:http://blog.csdn.net/songfree ...
- Excel 返回第2大的值
- Spring boot Thymeleaf 配置
第一步:pom.xml加入依赖 <!-- HTML templates--> <dependency> <groupId>org.springframework.b ...
- Mybatis知识(4)
1.当实体类中的属性名和表中的字段名不一样 解决办法①: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致 <select id=”selectorder” para ...
- Vue.js路由详解
有时候,我们在用vue的时候会有这样的需求,比如一个管理系统,点了左边的菜单栏,右边跳转到一个新的页面中,而且刷新的时候还会停留在原来打开的页面. 又或者,一个页面中几个不同的画面来回点击切换,这两种 ...
- Gson转换时,Double转式化
package com.mall.core; import java.lang.reflect.Type; import java.text.DecimalFormat; import com.goo ...
- C语言高级-结构,共用体,文件,链表
C语言结构 标准声明方式 struct student{ int age; char sex; }; 这个可以在main函数中定义: struct student ...
- spring 每个jar的作用
spring.jar 是包含有完整发布模块的单个jar 包.但是不包括mock.jar, aspects.jar, spring-portlet.jar, and spring-hibernate2. ...
- android笔记:Service
服务:在后台运行,没有界面的组件. 服务生命周期如下: 两种启动方式: 1.startService(): onCreate()-->onStartCommand()-->onDestro ...