数据结构-单链表(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 ...
随机推荐
- 3 - Selenium元素定位和操作
3.1定位 <button id="gbqfba" aria-label="Google Search" name="btnK" cl ...
- PHP笔试题和面试题
1.不用新变量直接交换现有两个变量的值 (1)list($a,$b)=array($b,$a); (2)a=a+b,b=a-b,a=a-b 2.PHP数字金额转大小格式,同时说明思路 function ...
- PowerShell 操作 OFFICE
UiPath操作Office软件的方式,这里说一下用PowerShell调用Office的COM组件的方式 老生常谈~每个程序员都要至少掌握一门脚本编程语言... EXCEL: $excel = Ne ...
- .net中Response.End() 和Response.Redirect("http://dotnet.aspx.cc");
问:什么情况下需要Response.End()语句,加这句有什么好处 答: 首先你要理解Response.End()的意思,它的意思是终止执行下面的语句!但有时不加和加上都一样,但还要加上好,为什么呢 ...
- springboot 学习笔记(五)
(五)springboot整合thymeleaf模板,实现简单的登陆 1.修改上一节笔记中的user表,新增一个password字段,同时要求username为UNIQUE,以实现登陆校验,表结构如下 ...
- 读取java配置文件properties
java项目里很多参数都是写在配置文件properties上,如果需要读取的话,可以使用jdk里提供的Properties类进行处理. 具体写法如下: public class PropertiesC ...
- cmd对其他盘符进行操作
一般我们打开cmd命令时,会出现如下界面: 现在,我想要对g盘进行操作,则输入 --> g:,然后回车,如图: 可以查看一下g盘下的所有子目录,输入 --> dir,回车,结果如下: 我想 ...
- 从零开始的全栈工程师——html篇1.8(知识点补充与浏览器兼容性)
知识点补充 一.浏览器的兼容问题(关于浏览器的兼容问题 有很多大佬已经解释的很清楚了 这个得自己百度去多花点时间去了解 这里咱们只说一下前面的漏点) 浏览器兼容性问题又被称为网页兼容性或网站兼容性问题 ...
- SVN Working copy '***' locked
问题描述: 用svn在项目文件夹下commit或者update时会出现错误提示“working copy locked” 解决方法: 1.在项目文件夹下,单击鼠标右键,选择tortoisesvn-&g ...
- iOS-加载数据的实现-MJRefresh
使用CocoaPods加载三方库: pod 'MJRefresh' MJRefresh类结构图: 具体实现方法和效果图: The drop-down refresh 01-Default self.t ...