这天要面试,提前把链表操作重新写了一遍。备份一下,以备不时之需。

希望有人能看到这篇代码,并指正。

 //  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)的更多相关文章

  1. 关于单链表的增删改查方法的递归实现(JAVA语言实现)

    因为在学习数据结构,准备把java的集合框架底层源码,好好的过一遍,所以先按照自己的想法把单链表的类给写出来了; 写该类的目的: 1.练习递归 2.为深入理解java集合框架底层源码打好基础 学习的视 ...

  2. Django学习笔记--数据库中的单表操作----增删改查

    1.Django数据库中的增删改查 1.添加表和字段 # 创建的表的名字为app的名称拼接类名 class User(models.Model): # id字段 自增 是主键 id = models. ...

  3. 史上最全单链表的增删改查反转等操作汇总以及5种排序算法(C语言)

    目录 1.准备工作 2.创建链表 3.打印链表 4.在元素后面插入元素 5.在元素前面增加元素 6.删除链表元素,要注意删除链表尾还是链表头 7.根据传入的数值查询链表 8.修改链表元素 9.求链表长 ...

  4. Django学习笔记(10)——Book单表的增删改查页面

    一,项目题目:Book单表的增删改查页面 该项目主要练习使用Django开发一个Book单表的增删改查页面,通过这个项目巩固自己这段时间学习Django知识. 二,项目需求: 开发一个简单的Book增 ...

  5. python全栈开发day61-django简单的出版社网站展示,添加,删除,编辑(单表的增删改查)

    day61 django内容回顾: 1. 下载: pip install django==1.11.14 pip install -i 源 django==1.11.14 pycharm 2. 创建项 ...

  6. Hbase常用操作(增删改查)

    Hbase常用操作(增删改查) [日期:2014-01-03] 来源:Linux社区  作者:net19880504 [字体:大 中 小]     运行Eclipse,创建一个新的Java工程“HBa ...

  7. Android-Sqlite-OOP方式操作增删改查

    之前写的数据库增删改查,是使用SQL语句来实现的,Google 就为Android开发人员考虑,就算不会SQL语句也能实现增删改查,所以就有了OOP面向对象的增删改查方式 其实这种OOP面向对象的增删 ...

  8. hibernate对单表的增删改查

    ORM: 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping) 实现对单表的增删改查 向区域表中增加数据: 第一步: 新建一个Da ...

  9. JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删改查),事件

    JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删 ...

  10. java实现单链表的增删改以及排序

    使用java代码模拟单链表的增删改以及排序功能 代码如下: package com.seizedays.linked_list; public class SingleLinkedListDemo { ...

随机推荐

  1. CDH 无法查看history log

    1.配置(core-site.xml) <property>  <name>hadoop.http.staticuser.user</name>  <valu ...

  2. linux文件系统操作——底层文件访问

        在不使用标准I/O的情况下,使用write,read,open实现对文件的复制操作,这些调用都是直接使用底层系统调用,完成从用户代码到内核代码的切换,消耗大量的系统资源,今天对此进行研究主要是 ...

  3. android-适配Adapter

    Adapter是把数据和用户界面视图绑定到一起的桥梁类,负责创建用来表示父视图中的每一个条目的子视图,并提供对底层数据的访问. public class MainActivity extends Ac ...

  4. MongoDB Query

    每条数据格式如下 { "_id" : ObjectId("5383298561aa33a422d8603e"), "day" : " ...

  5. QTableView另类打印解决方案(复用render函数去解决print问题)

    Qt QTableView另类打印解决方案     上回书说道Qt的model/view,我就做了个demo用于显示数据库中的内容.没想到tableview的打印竟然成了问题.我困惑了,难道Qt不应该 ...

  6. 20 你应该知道的PHP库

    下面是一些非常有用的PHP类库,相信一定可以为你的WEB开发提供更好和更为快速的方法. 图表库 下面的类库可以让你很简的创建复杂的图表和图片.当然,它们需要GD库的支持. pChart – 一个可以创 ...

  7. 【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java

    [LeetCode]Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum dept ...

  8. 笔试题:金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出

    收集这道题目原因是以前做过,但是实现的很麻烦,这次看到别人写的感觉简单易懂. 从一个pdf看到,出处就不贴了 = .= public class RenMingBi { private static ...

  9. 意大利奢侈品牌-Kiton 华丽进驻北京新光天地-时尚生活-泛高尔夫网

    意大利奢侈品牌-Kiton 华丽进驻北京新光天地-时尚生活-泛高尔夫网 意大利奢侈品牌-Kiton 华丽进驻北京新光天地

  10. iOS开发常识

    一.NSString 创建字符串.  NSString *astring = @"This is a String!"; 创建空字符串,给予赋值.  NSString *astri ...