#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 100
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2 typedef int status; //函数返回类型
typedef int ElemType; //数据类型
typedef struct Lnode
{
ElemType data;
struct Lnode *next;
} Lnode, *Linklist; int i,j;
/*
创建
添加(在数字i 之前)
删除i 号元素
打印链表
合并链表
链表排序(比较low)
*/
status CreateList_L(Linklist *L, int n);
status ListInsert_L(Linklist *L, int i, ElemType e);
status ListDelete_L(Linklist *L, int i, ElemType *e);
status ListPrint_L(Linklist L);
status MergeList_L(Linklist *La, Linklist *Lb, Linklist *Lc);
status ListSort_L(Linklist *L, int n); int main()
{
Linklist List, L2, L3;
ElemType e;
int p;
printf("Please input 5 number to insert the list_A:\n");
CreateList_L(&List, 5);
printf("Please input the element to insert_A:\n");
scanf("%d", &e);
printf("Please input the position to insert_A:\n");
scanf("%d", &p);
ListInsert_L(&List, p, e);
printf("After insert,the list is:\n");
ListPrint_L(List);
printf("Please input the position to delete_A:\n");
scanf("%d", &p);
ListDelete_L(&List, p, &e);
printf("After delete,the list is:\n");
ListPrint_L(List);
printf("Please input 5 number to insert the list_B:\n");
CreateList_L(&L2, 5);
ListSort_L(&List, 5);
ListSort_L(&L2, 5);
MergeList_L(&List, &L2, &L3);
ListPrint_L(L3);
return 0;
} status CreateList_L(Linklist *L,int n)
{
Linklist r;
*L = (Linklist)malloc(sizeof(Lnode));
(*L)->next = NULL;
r = *L;
for (i= 1; i<= n; ++i)
{
Linklist p = (Linklist)malloc(sizeof(Lnode));
scanf("%d", &p->data);
r->next = p;
r = p;
};
r->next = NULL;
}; status ListInsert_L(Linklist *L, int i, ElemType e)
{
Linklist p = *L;
j = 0;
while (p && j< i- 1)
p = p->next, ++j;
if (!p || j> i- 1)
return ERROR;
Linklist s = (Linklist)malloc(sizeof(Lnode));
s->data = e;
s->next = p->next;
p->next = s;
return OK;
} status ListDelete_L(Linklist *L, int i, ElemType *e)
{
Linklist p = *L;
j = 0;
while (p->next && j< i- 1)
{
p=p->next;
++j;
}
if (!(p->next) || j> i- 1)
return ERROR;
Linklist q = p->next;
p->next = q->next;
*e = q->data;
free(q);
return OK;
} status ListPrint_L(Linklist L)
{
Linklist temp = L->next;
while(temp != NULL)
{
printf("%d%c",temp->data,temp->next==NULL?'\n':' ');
temp = temp->next;
}
return OK;
}
/*
不知道为啥MergeList_L老是(内存越界?)错误.
结论:free问题,自己free了自己应用的内存真是自己犯的错笑着也要改下去:)
*/ status MergeList_L(Linklist *La, Linklist *Lb, Linklist *Lc)
{
Linklist pa = *La;
Linklist pb = *Lb;
pa = pa->next, pb = pb->next;
Linklist pc = *Lc = *La;
while(pa&& pb)
{
if(pa->data <= pb->data)
pc->next = pa, pc = pa, pa = pa->next;
else
pc->next = pb, pc = pb, pb = pb->next;
}
pc->next = pa ? pa : pb;
// free(Lb);
}
status ListSort_L(Linklist *L, int n)
{
ElemType temp;
ElemType *a= (ElemType*)malloc(n* sizeof(*a));
Linklist p,q;
p= *L;
q= *L;
i= 0;
while(q)
a[i++]= q->data, q= q->next;
for(i= 1; i<= n; i++)
for(j= 1; j<= n- i; j++)
if(a[j]>a[j+1])
temp= a[j], a[j]= a[j+1], a[j+1]= temp;
i= 0;
while(p)
p->data= a[i++], p= p->next;
}

数据结构-单链表(Linked List)的更多相关文章

  1. python实现数据结构单链表

    #python实现数据结构单链表 # -*- coding: utf-8 -*- class Node(object): """节点""" ...

  2. C语言数据结构-单链表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作

    1.数据结构-单链表的实现-C语言 typedef struct LNode { int data; struct LNode* next; } LNode,*LinkList; //这两者等价.Li ...

  3. 数据结构——单链表java简易实现

    巩固数据结构 单链表java实现 单链表除了表尾 每个几点都有一个后继 结点有数据和后继指针组成  通过构建表头和表尾(尾部追加需要)两个特殊几点 实现单链表的一些操作,代码如下 package co ...

  4. 数据结构——单链表(singly linked list)

    /* singlyLinkedList.c */ /* 单链表 */ /* 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. */ #include <stdio ...

  5. java数据结构——单链表、双端链表、双向链表(Linked List)

    1.继续学习单链表,终于摆脱数组的魔爪了,单链表分为数据域(前突)和引用域(指针域)(后继),还有一个头结点(就好比一辆火车,我们只关心火车头,不关心其它车厢,只需知晓车头顺藤摸瓜即可),头结点没有前 ...

  6. 数据结构—单链表(类C语言描写叙述)

    单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List). 链表的详细存储表示为: ① 用一组随意的存储单元来存放线性表的结点(这组存储单元既能够是连续的.也能够是不连续的) ...

  7. 数据结构之链表(Linked list)

    说明:如果仔细阅读完全文后,可能感觉有些不统一,这里先说明下原因. 链表尾引用不统一:在介绍单链表时,只有一个链表首部的引用(head) 指向第一个节点.你看到后面关于双链表及循环列表时,除了指向第一 ...

  8. C# 数据结构--单链表

    什么是单链表 这两天看到很多有关单链表的面试题,对单链表都不知道是啥的我.经过学习和整理来分享一下啥是单链表和单链表的一些基本使用方法.最后看些网上有关单链表的面试题代码实例. 啥是单链表? 单链表是 ...

  9. 数据结构-------单链表(C++)

    相关信息: /** * @subject 数据结构 实验2 * @author 信管1142班 201411671210 赖俊杰 * @project 单链表 * @time 2015年10月29日1 ...

随机推荐

  1. UiAutomator新建工程

    新建工程步骤: 1.打开Eclipse 2.新建一个java工程UiAutomatorDemo1,然后新建一个包com.hhb 3.选中java工程,右击新建文件夹,命名为libs,在D:\Andro ...

  2. Python lambda(匿名函数)介绍【转】

    引用: http://www.cnblogs.com/evening/archive/2012/03/29/2423554.html 在学习python的过程中,lambda的语法时常会使人感到困惑, ...

  3. android 开发-Process and Thread

    目录 1 android中进程与线程 - Processes and Threads 1.1 进程 - Processes 1.1.1 进程的生命期 1.2 线程 - Threads 1.2.1 工作 ...

  4. mybatis持久化操作“无效的类型111解决”

    mybatis持久化操作时,如果插入数据为null的情况下,由于内部机制问题,会导致报错,导致出现:“无效的类型:1111”示例如下: org.springframework.jdbc.Uncateg ...

  5. Servlet高级部分Listener

    监听器的使用场景: ①:统计在线人数   ②:实现单一登录[一个账号只能在一台机器上登录] Servlet中的8大监听器: 1.         ServletContextListener [接口方 ...

  6. JSP对象和JavaBean

    1. JSP 客户端请求 当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信息头的一部分来传送的,如下图所示: Http请求头对应的内容如下: 对应方 ...

  7. Python核心编程——正则表达式

    本篇博客都是我认真读之后写的,有些地方和书上的语句一样…… 1.简介 正则表达式为高级的文本模式匹配.抽取.与/或文本形式的搜索和替换功能提供了基础.简单地说,正则表达式(简称regex)是一些由字符 ...

  8. java 串口通信实现流程

    1.下载64位rxtx for java 链接:http://fizzed.com/oss/rxtx-for-java 2.下载下来的包解压后按照说明放到JAVA_HOME即JAVA的安装路径下面去 ...

  9. 使用AirDroid控制百度影棒

    十一假期的时候看到有促销活动买了一个百度影棒2S+.话说这东西当做普通家庭客厅的电视盒子还差点火候,不论是操作还是内容用起来都有点折腾.(当然,有些是形势所迫,大家都懂.) 不过,如果就把它看作是普通 ...

  10. POJ 2385 Apple Catching(01背包)

    01背包的基础上增加一个维度表示当前在的树的哪一边. #include<cstdio> #include<iostream> #include<string> #i ...