#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. Shell笔试题1

    1.用Shell编程,判断一文件是不是块或字符设备文件,如果是将其拷贝到 /dev 目录下. #!/bin/bash#1.sh#判断一文件是不是字符或块设备文件,如果是将其拷贝到 /dev 目录下#f ...

  2. cucumber的hooks

    引用链接:https://github.com/cucumber/cucumber/wiki/Hooks Hooks Cucumber provides a number of hooks which ...

  3. Ini文件格式说明

    http://www.cnblogs.com/CUIT-DX037/ 百度百科介绍:ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储 ...

  4. chrome浏览器表单自动填充默认样式-autofill

    Chrome会在客户登陆过某网站之后, 会自动记住密码 当你下次再次进入该网站的时候, 可以自由的选择登陆的账号, Chrome会为你自动填充密码. 而你无需再输入密码 这本身是一个很好的功能, 但是 ...

  5. flask--数据库连接--URL

    使用URL制定数据库 数据库引擎 URL MySQL mysql://username:password@hostname/database Postgres postgresql://usernam ...

  6. C 碎片二 数据类型

    一.概述 C 语言包含的数据类型如下图所示: 二.各种数据类型介绍 2.1 整型 整形包括短整型.整形和长整形. 2.1.1 短整形 short a=1; 2.1.2 整形 一般占4个字节(32位), ...

  7. JMeter测试TCP服务器遇到的一个奇怪问题

    今天工作需要测TCP服务器的压力,因为tsung测试TCP需要写的脚本实在头大,于是换了JMETER来搞压力测试.在实际测试的过程中,遇到了一个很奇怪的问题,就是发了数据包以后,JMeter不停地报5 ...

  8. mysql数据库初步了解

    一丶数据库服务器丶数据管理系统丶数据库丶表与记录的关系 记录:1 xxxx 3245646546(多个字段的信息组成一条记录,即文件中的一行内容) 表: Student.school,class_li ...

  9. [习题] FindControl 简单练习--GridView + CheckBox,点选多列数据(复选删除)#3 List或数组

    [习题] FindControl 简单练习--GridView + CheckBox,点选多列数据(复选删除)#3 List或数组 之前的范例,使用字符串.文字来记录将删除的文章ID 后续会有很多小缺 ...

  10. ES6中set和map的区别

    Set ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化. // 例一 var set = ne ...