数据结构-单链表(Linked List)
#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)的更多相关文章
- python实现数据结构单链表
#python实现数据结构单链表 # -*- coding: utf-8 -*- class Node(object): """节点""" ...
- C语言数据结构-单链表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作
1.数据结构-单链表的实现-C语言 typedef struct LNode { int data; struct LNode* next; } LNode,*LinkList; //这两者等价.Li ...
- 数据结构——单链表java简易实现
巩固数据结构 单链表java实现 单链表除了表尾 每个几点都有一个后继 结点有数据和后继指针组成 通过构建表头和表尾(尾部追加需要)两个特殊几点 实现单链表的一些操作,代码如下 package co ...
- 数据结构——单链表(singly linked list)
/* singlyLinkedList.c */ /* 单链表 */ /* 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. */ #include <stdio ...
- java数据结构——单链表、双端链表、双向链表(Linked List)
1.继续学习单链表,终于摆脱数组的魔爪了,单链表分为数据域(前突)和引用域(指针域)(后继),还有一个头结点(就好比一辆火车,我们只关心火车头,不关心其它车厢,只需知晓车头顺藤摸瓜即可),头结点没有前 ...
- 数据结构—单链表(类C语言描写叙述)
单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List). 链表的详细存储表示为: ① 用一组随意的存储单元来存放线性表的结点(这组存储单元既能够是连续的.也能够是不连续的) ...
- 数据结构之链表(Linked list)
说明:如果仔细阅读完全文后,可能感觉有些不统一,这里先说明下原因. 链表尾引用不统一:在介绍单链表时,只有一个链表首部的引用(head) 指向第一个节点.你看到后面关于双链表及循环列表时,除了指向第一 ...
- C# 数据结构--单链表
什么是单链表 这两天看到很多有关单链表的面试题,对单链表都不知道是啥的我.经过学习和整理来分享一下啥是单链表和单链表的一些基本使用方法.最后看些网上有关单链表的面试题代码实例. 啥是单链表? 单链表是 ...
- 数据结构-------单链表(C++)
相关信息: /** * @subject 数据结构 实验2 * @author 信管1142班 201411671210 赖俊杰 * @project 单链表 * @time 2015年10月29日1 ...
随机推荐
- Unity 切换场景的时候让某个游戏对象不消失
DontDestroyOnLoad(要操作的GanmeObject); 放在Start方法里就行
- Unity GameObject.Find 和 transform.Find
transform.Find(""); 找到子游戏对象,找自己找不到,能找到未激活的子游戏对象. 括号里可以是游戏对象的名字,也可以是层级. GameObject.Find(&qu ...
- OpenStack Weekly Rank 2015.07.20
Module Reviews Drafted Blueprints Completed Blueprints Filed Bugs Resolved Bugs Cinder 8 1 3 9 10 Sw ...
- C# 几种数据类型转换方式
1.(int)变量名[强制类型转换] 该转换方式主要用于数字类型之间的转换,从int类型向long,float,double,decimal 类型转换可以使用隐式转换,但从long型到int 就需要使 ...
- win7,docker安装后,创建虚拟机分配不了ip错误 err: exit status 255
问题 win7装docker真麻烦,不如家里的win10爽.另外明明这是个很简单的操作,但是国内的解决方法有点落后,所以我写了个傻瓜式的. 有兴趣的可以直接看issue https://github. ...
- idea代码生成功能 live template
一 界面 二 添加 三 编写模板 模板可以通过看其他的模板学习相应语法,难不倒程序员的 四 选择适应范围 五 本人常用的模板 log private static final Logger log = ...
- <llinux下kvm虚拟化>
原理就是本来可能要10台物理机完成的事现在只要5台,分别在每台物理机上虚拟一台,这5太虚拟机共享一个stronge,比如有一台物理机down掉后或是要做维护,我们可以把它上面的虚拟机牵走,从而减少损失 ...
- Java实例学习——企业进销存管理系统(3)
Java实例学习--企业进销存管理系统(3) (本实例为书上实例,我所记录的是我的学习过程) 开始时间:2月12日 完成时间:暂未完成 2月16日-公共类(Item公共类,数据模型公共类,Dao公共类 ...
- ElasticSearch服务器操作命令
在win7环境,进入elasticsearch安装目录的bin目录: 1. elasticsearch.bat 就可以启动elasticsearch了.运行这个插件的好处是:elasticsearch ...
- Emgu CV 初试
Emgu CV 是.NET平台下对OpenCV图像处理库的封装,也就是.NET版.可以运行在C#.VB.VC++等. 安装完成后需要设置环境变量,比如我安装在D:\Emgu\emgucv-window ...