C语言,单链表操作(增删改查)(version 0.1)
这天要面试,提前把链表操作重新写了一遍。备份一下,以备不时之需。
希望有人能看到这篇代码,并指正。
// File Name : list.h
#include "stdafx.h"
#include "stdio.h"
#include <stdlib.h>
#include "string.h" //creat list
//creat node
//insert
//del
//find
//sort
typedef int data_t ;
typedef struct NODE{
data_t data;
NODE* next;
}NODE ,*NODEPTR; typedef struct LIST{
NODE* head;//init==0
NODE* tail;//init==0
int num ; //min==0
}LIST; //create
extern NODE *create_node(data_t data);
extern LIST *creat_list();
extern bool is_null(LIST* list);
//find
extern NODE* find_node(LIST* list ,data_t data);
extern NODE* inline find_node_by_index(LIST* list , int index);//index : from 1 to list->num //del
extern int del_node_data(LIST* list,data_t data);
extern data_t del_node_head(LIST* list );
extern data_t del_node_index(LIST* list,int index);//index : from 1 to list->num
extern data_t del_node_tail(LIST* list ); //insert
extern int insert_data_F(LIST* list, data_t data);
extern void insert_node_F(LIST* list, NODE* node);
extern int insert_data_T(LIST* list, data_t data);
extern void insert_node_T(LIST* list, NODE* node );
extern int insert_data_index(LIST* list , data_t data,int index);//index : from 1 to list->num
extern int insert_node_index(LIST* list , NODE* node,int index);//index : from 1 to list->num extern int insert_data_ordered(LIST* list , data_t data );//assume the list is ordered (low to high )
//sort
extern int sort(LIST* list);
extern int swap(LIST* list, int indexf,int indexn);//index : from 1 to list->num
extern int inline swap_node(NODE* before ,NODE* next);
/****************************************************************************** Copyright (C), 2001-2011, DCN Co., Ltd. ******************************************************************************
File Name : list.c
Version : Initial Draft
Author : ocj
Created : 2014/8/8
Last Modified :
Description : singlelist
Function List :
create_node
creat_list
del_node_data
del_node_head
del_node_index
del_node_tail
find_node
find_node_by_index
insert_data_F
insert_data_index
insert_data_ordered
insert_data_T
insert_node_F
insert_node_index
insert_node_T
is_null
sort
swap
swap_node
History :
1.Date : 2014/8/8
Author : ocj
Modification: Created file ******************************************************************************/
#include "list.h"
//if success :ret!=0
LIST *creat_list()
{
LIST* list = (LIST*)malloc(sizeof(LIST));
list->head = ;
list->tail = ;
list->num = ;
return list;
}
//if success :ret!=0
NODE *create_node(data_t data)
{
NODE* node = (NODE*)malloc(sizeof(NODE));
node->dext = ;
node.data = data;
return node;
} //return 1: is null
//return 0: not null
bool is_null(LIST* list)
{
//return (list->num==0); //method 1
return (list->head->next == ) ;//method 2
} //ret==0:fail
int insert_node_F(LIST* list, NODE* node)
{
if(list== || node ==){
return ;
}
if(list->head==){
list->tail = node;
}
list->head = node ;
node->next = list->head;
//if list is null ,node->next == list->head==0
//if list is not null ,node->next == list->head!=0
list->num++;
} //return 1 : ok
//return 0 : fail
int insert_data_F(LIST* list, data_t data)
{
NODE* node = create_node(data);
if(node){
return ;
}
insert_node_F(list , node);
return ;
} void insert_node_T(LIST* list, NODE* node )
{
if(list->head==){
node->next = ;
list->head = list->tail = node;
} list->tail = node ;
node->next = ;
list->num++;
} //return 1 : ok
//return 0 : fail
int insert_data_T(LIST* list, data_t data)
{
NODE* node = create_node(data);
if(node){
return ;
}
insert_node_T(list , node);
return ;
} //ret=0: fail
int insert_node_index(LIST* list , NODE* node,int index)
{
if(index>listnum+) {
return ;
} if(index==){
insert_node_F(list ,node);
}else if(index ==list->num+){
insert_node_T(list ,node);
}else{
NODE* before = list->head;
while(index>){
index--;
before = before->next;
}
node->next = before->next ;
before->next = node ;
list->num++;
}
return ;
}
//ret=0: fail
int insert_data_index(LIST* list , data_t data,int index)
{
NODE* node = create_node(data) ;
if(node==null){
return ;
}
return insert_node_index(list , node,index );
} //assume the order is low to high
//ret==0: fail
int insert_data_ordered(LIST* list , data_t data )
{
NODE* node = create_node(data);
if(node==){
return ;
}
if(list->head == ){
list->head = list->tail = node;
return ;
} if(node->data < head->data){
insert_data_F(list ,node);
}else {
list->num++;
NODE *before = head;
NODE* nodet = head->next ;
while(node->data > nodet->data && nodet->next!=){
//until( node->data < nodet->data || tail )
nodet = nodet->next ;
before = before->next;
}
if(nodet->next==){
nodet->next = node ;
}else{
node->next = nodet ;
before->next = node ;
}
}
return ;
} //not find: return 0
//success find and del :return 1
int del_node_data(LIST* list,data_t data) //find and del first_found
{
if(list->num ==){
return ;
} NODE* before = list->head ;
NODE* nodet = list->head ;
if(nodet->data == data){ //head->data == data
list->head = list->head->next ;
free(nodet);
list->num--;
return ;
} nodet = nodet->next;
while(nodet->data!=data && nodet->next!= ){
nodet = nodet->next;
}
if(nodet->data == data ){
before->next = nodet->next ;
free(nodet);
list->num--;
}else{//not found
return ;
}
return ;
} data_t del_node_index(LIST* list,int index)
{
if(is_null(list) || index > list->num){
exit(-);
}
NODE* before = list->head ;
NODE* del = list->head ;
data_t data ;
if(list->num == ) { //head
list->num--;
list->head = list->tail = ;
data = del->data;
free(del);
return data;
} int first = ;
for( ;index>;index--){//offset --- index
if(!first){
before = before->next ;
}
first = ;
del = del->next;
} before->next = del->next ;
data = del->data;
if(del==list->tail){
list->tail = before ;
}
free(del);
list->num--;
return data; }
data_t del_node_head(LIST* list )
{
if(is_null(list)){
exit(-) ;
}
data_t data ;
NODE* del = list->head ;
list->head = list->head->next ;
free(del);
list->num--;
return data;
}
data_t del_node_tail(LIST* list )
{
if(is_null(list)){
exit(-) ;
}
NODE *before = list->head ;
data_t data = list->tail->data; if(list->num ==){
list->head = list->tail = ;
list->num--;
free(before);
return data ;
} while(before->next!= && before->next->next != ) {
before = before->next ;
} list->tail = before;
list->num--;
free(before->next);
return data ;
} //return 0: fail to find
//return node* : node first_found
NODE* find_node(LIST* list ,data_t data)
{
if(is_null(list)){
return ;
} NODE* nodet = list->head;
do{
if(nodet->data == data)
return nodet;
}while(nodet->next!=); return ;
} //head_index == 1;
//return 0: fail to find
//return node* : node first_found
NODE* inline find_node_by_index(LIST* list , int index)
{
if(list== || list->num == || index > list->num){
return ;
}
NODE* find = list->head;
while(--index){
find =find->next;
}
return find ;
} int swap(LIST* list, int indexf,int indexn)
{
NODE* nodef = find_node( list , indexf ) ;
NODE* noden = find_node( list , indexn ) ;
data_t swp = nodef->data;
nodef->data = noden->data;
noden->data = swp->data;
} //ret==0 : fail
int inline swap_node(NODE* before ,NODE* next)
{
if(before == ||next == ){
return ;
}
before->data ^=next->data ;
next->data ^=before->data ;
before->data ^=next->data ;
} //asume from little to big
int sort(LIST* list)
{
int times;
int index;
NODE* before = list->head;
NODE* next = ;
if(list==){
return ;
}
if(list->num==){
return ;
}
for(times=;times<list->num ;times++){
for(index=;index<=size-times;index++){
before = find_node_by_index(list ,index);
next = before->next;
if(next->data<before->data){
//before->data = before->data^ next->data ;
//nexty->data = before->data^ next->data ;
//before->data = before->data^ next->data ;
swap_node(before , next);
}
}
return ;
}
C语言,单链表操作(增删改查)(version 0.1)的更多相关文章
- 关于单链表的增删改查方法的递归实现(JAVA语言实现)
因为在学习数据结构,准备把java的集合框架底层源码,好好的过一遍,所以先按照自己的想法把单链表的类给写出来了; 写该类的目的: 1.练习递归 2.为深入理解java集合框架底层源码打好基础 学习的视 ...
- Django学习笔记--数据库中的单表操作----增删改查
1.Django数据库中的增删改查 1.添加表和字段 # 创建的表的名字为app的名称拼接类名 class User(models.Model): # id字段 自增 是主键 id = models. ...
- 史上最全单链表的增删改查反转等操作汇总以及5种排序算法(C语言)
目录 1.准备工作 2.创建链表 3.打印链表 4.在元素后面插入元素 5.在元素前面增加元素 6.删除链表元素,要注意删除链表尾还是链表头 7.根据传入的数值查询链表 8.修改链表元素 9.求链表长 ...
- Django学习笔记(10)——Book单表的增删改查页面
一,项目题目:Book单表的增删改查页面 该项目主要练习使用Django开发一个Book单表的增删改查页面,通过这个项目巩固自己这段时间学习Django知识. 二,项目需求: 开发一个简单的Book增 ...
- python全栈开发day61-django简单的出版社网站展示,添加,删除,编辑(单表的增删改查)
day61 django内容回顾: 1. 下载: pip install django==1.11.14 pip install -i 源 django==1.11.14 pycharm 2. 创建项 ...
- Hbase常用操作(增删改查)
Hbase常用操作(增删改查) [日期:2014-01-03] 来源:Linux社区 作者:net19880504 [字体:大 中 小] 运行Eclipse,创建一个新的Java工程“HBa ...
- Android-Sqlite-OOP方式操作增删改查
之前写的数据库增删改查,是使用SQL语句来实现的,Google 就为Android开发人员考虑,就算不会SQL语句也能实现增删改查,所以就有了OOP面向对象的增删改查方式 其实这种OOP面向对象的增删 ...
- hibernate对单表的增删改查
ORM: 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping) 实现对单表的增删改查 向区域表中增加数据: 第一步: 新建一个Da ...
- JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删改查),事件
JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删 ...
- java实现单链表的增删改以及排序
使用java代码模拟单链表的增删改以及排序功能 代码如下: package com.seizedays.linked_list; public class SingleLinkedListDemo { ...
随机推荐
- C++对象模型5--多继承下的对象模型
C++对象模型中加入多继承 从单继承可以知道,派生类中只是扩充了基类的虚函数表.如果是多继承的话,又是如何扩充的? 1) 每个基类都有自己的虚表. 2) 子类的成员函数被放 ...
- RAC ORA-12170 ora-12535/tns-12535
现象:开发人员抱怨RAC数据库出现了时连得上时连不上的情况,用SQLPLUS一试,果然有这样的情况: SQL> conn system/*******@bjyd 已连接. SQL> con ...
- hadoop配置及无法移动文件到hdfs故障解析
首先博主用的64位ubuntu,hadoop官方只提供32位版本,这样的话启动本地库无法兼容,需要自己编译为64位版本,或下载别人编译好的64位版本. 下载好需要在etc/hadoop目录下改动以下几 ...
- ASP.NET JQuery Ajax 详解
在.NET中使用Ajax请求,我们可以使用一般处理程序,或者Web服务,还有一种是使用后台的Web方法(注意:当我们使用后台的Web方法是,后台方法必须加可访问性必须为: public,且为stati ...
- Oracle不能导入空表解决方案
C:\Users\Administrator>sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on 星期日 8月 17 1 ...
- 怪兽z主机豪华版 答问。
我的淘宝店里,怪兽z主机标准版,分经济版本,标准版,豪华版,三个版本.这里给大家详细介绍一下豪华版的概况. 淘宝购买地址:http://item.taobao.com/item.htm?id=3818 ...
- Android Studio ADB响应失败解决方法
当启动Android Studio时,如果弹出 adb not responding. you can wait more,or kill "adb.exe" process ma ...
- Spinner样式大全
Spinner样式大全
- JAVA GUI学习 - JInternalFrame浮动窗口:可拖拽窗口(依赖于父窗口)
public class JInternalFrameKnow extends JInternalFrame { public JInternalFrameKnow() { this.setBound ...
- c语言实现tree数据结构
该代码实现了tree的结构.依赖dyArray数据结构.有first一级文件夹.second二级文件夹. dyArray的c实现參考这里点击打开链接 hashTable的c实现參考这里点击打开链接 ...