C语言-线性表基本操作之单链表
下面是单链表的基本操作:
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct Lnode
{
ElemType data;
struct Lnode *next;
}LinkList;
void HeadCreateList(LinkList*&L,ElemType a[],int n)
{
LinkList *s;
int i;
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
for(i=0;i<n;i++)
{
s=(LinkList*)malloc(sizeof(LinkList));
s->data=a[i];
s->next=L->next;
L->next=s;
}
}
void TailCreateList(LinkList*&L,ElemType a[],int n)
{
LinkList *s,*r;
int i;
L=(LinkList*)malloc(sizeof(LinkList));
r=L;
for(i=0;i<n;i++)
{
s=(LinkList*)malloc(sizeof(LinkList));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
void InitList(LinkList *&L)
{
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
}
void DestroyList(LinkList *&L)
{
LinkList *pre=L,*p=L->next;
while(p!=NULL)
{
free(pre);
pre=p;
p=pre->next;
}
free(pre);
}
bool ListEmpty(LinkList *L)
{
return L->next==NULL;
}
int ListLength(LinkList *L)
{
int n=0;
LinkList*p=L;
while(p->next!=NULL)
{
n++;
p=p->next;
}
return n;
}
void DisplayList(LinkList *L)
{
LinkList *p=L->next;
while(p!=NULL)
{
printf("%d",p->data);
p=p->next;
}
printf("\n");
}
bool GetElem(LinkList *L,int i,ElemType &e)
{
int j=0;
LinkList *p=L;
while(j<i&&p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{
e=p->data;
return true;
}
}
int LocateElem(LinkList *L,ElemType e)
{
int i=1;
LinkList *p=L->next;
while(p!=NULL&&p->data!=e)
{
p=p->next;
i++;
}
if(p==NULL)
return 0;
else
return i;
}
bool ListInsert(LinkList *&L,int i,ElemType e)
{
int j=0;
LinkList *p=L,*s;
while(j<i-1 &&p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{
s=(LinkList*)malloc(sizeof(LinkList));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
}
bool ListDelete(LinkList *&L,int i,ElemType &e)
{
int j=0;
LinkList *p=L,*q;
while(j<i-1 &&p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{
q=p->next;
if(q==NULL)
return false;
e=q->data;
p->next=q->next;
free(q);
return true;
}
}
void split(LinkList *&L,LinkList *&L1,LinkList*&L2)
{
LinkList*p=L->next,*q,*r1;
L1=L;
r1=L1;
L2=(LinkList*)malloc(sizeof(LinkList));
L2->next=NULL;
while(p!=NULL)
{
r1->next=p;
r1=p;;
p=p->next;
q=p->next;
p->next=L2->next;
L2->next=p;
p=q;
}
r1->next=NULL;
}
void delmaxnode(LinkList *&L)
{
LinkList *p=L->next,*pre=L,*maxp=p,*maxpre=pre;
while(p!=NULL)
{
if(maxp->data<p->data)
{
maxp=p;
maxpre=pre;
}
pre=p;
p=p->next;
}
maxpre->next=maxp->next;
free(maxp);
}
void sort(LinkList *&L)
{
LinkList *p,*pre,*q;
p=L->next->next;
L->next->next=NULL;
while(p!=NULL)
{
q=p->next;
pre=L;
while(pre->next!=NULL &&pre->next->data<p->data)
pre=pre->next;
p->next=pre->next;
pre->next=p;
p=q;
}
}
void main()
{
printf("1-创建一个单链表 2-排序单链表\n");
printf("3-插入一个元素 4-删除一个元素\n");
printf("5-删除最大的节点 \n");
LinkList *s;
int a[15]={0};
printf("enter 10 data:\n");
for(int i=0;i<10;i++)
scanf("%d",&a[i]);
HeadCreateList(s,a,10);
DisplayList(s);
printf("排序单链表:\n");
sort(s);
printf("input the list:\n");
DisplayList(s);
printf("插入一个节点:\n");
ListInsert(s,3,4);
DisplayList(s);
printf("删除一个节点:\n");
int e=0;
ListDelete(s,5,e);
DisplayList(s);
printf("the delete data is :%d\n",e);
printf("delete the max node:\n");
delmaxnode(s);
printf("input:\n");
DisplayList(s);
system("pause");
}
转载于:https://blog.51cto.com/7832308/1390153
C语言-线性表基本操作之单链表相关推荐
- C语言线性表之循环单链表
#include<stdio.h> #include<stdlib.h>int typeOfLinkList;typedef struct LNode{int data;str ...
- 线性表基本操作,单链表的建立(头插法,尾插法)、插入、删除、遍历操作的实现(c++ 数据结构 实验二)
大学数据结构课程的实验题目,掌握线性表的链接存储结构,用c++语言描述 一.实验要求 1.分别用头插法和尾插法建立一个含有若干结点的单链表 2.对已建立的单链表进行插入.删除.遍历输出等操作 二.代码 ...
- 线性表的应用 —— 单链表
线性表的应用 -- 单链表 链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内的存储位置不一定相邻,可以给每个元素都附加一个指针域,指向下一个元素的存储位置. 像这样: 从图中可以看出,每个节点都 ...
- PHP数据结构之三 线性表中的单链表的PHP实现
线性表的链式存储:用一组任意的存储单元存储线性表中的数据元素.用这种方法存储的线性表简称线性链表. 链式存储线性表的特点:存储链表中结点的一组任意的存储单元可以是连续的,也可以是不连续的,甚至是零散分 ...
- 数据结构(算法)-线性表2(单链表)
为什么80%的码农都做不了架构师?>>> /** 单链表 双链表1,空的线性表setNull(L) 2,insert 加入元素 3,根据位置查找元素 4,查找所有元素 5,删除 ...
- [XJTUSE]数据结构学习——第一章 线性表 1.3 单链表的实现(JAVA)
文章目录 1.3 单链表的实现(JAVA) 1.curr指针与头结点的说明 2.插入和删除操作的说明 插入 删除 1.3 单链表的实现(JAVA) 链表是由一系列叫做表的结点(node)的对象组成的, ...
- java线性表合并_单链表的合并(Java实现)
C语言能做的,Java照样可以做.但是没有指针的操作,可能使人看起来"不舒服".这个博客是为了个人学习算法和数据结构而开的,以后凡是涉及到这方面的内容,我会尽量用Java和C同时实 ...
- 线性表详解(静态链表、单链表、双向链表、循环链表)
目录 申明 1. 线性表的定义 2. 线性表的抽象数据类型 3. 线性表的顺序存储结构 3. 1 顺序存储定义 3. 2 顺序存储方式 3. 3 数据长度与线性表长度区别 3. 4 地址计算方法 4. ...
- 链表归并成递减c语言,将递增有序单链表A和B归并成表C 递减单链表的尾插法建立和输出...
自己辛苦成果,拿出来帮助那些数据结构没学好和C语言基础差的人 #include #include typedef struct Node { int data; struct Node *next; ...
最新文章
- 解决PHP Fatal error mysql_connect() mysql_query()的问题
- 第27章:MongoDB-索引--唯一索引
- 【EMV L2】SDA静态数据认证处理流程
- 【Kafka】Kafka使用代码设置offset值
- (2015秋) 软工作业成绩公布
- 动态规划算法经典例题_c动态规划精简例题
- visio保存后公式变形_固体力学中的变形分析
- C#实现不安装Oracle客户端访问远程服务器数据
- Win10 SAS9.4缺少增强型编辑器
- 学习Hibernate框架笔记-第3天
- 卸载office2010后 再安装2013 错误1706 安装程序找不到需要的文件
- R:首次尝试线性回归
- Java枚举(enum)
- 云计算时代的软件行业变化
- c++中的 trivial destructor
- 【HEC-RAS】02 软件下载及安装
- btrfs和ntfs linux5,如何选择文件系统EXT4、Btrfs 和 XFS
- 名词从句、定语从句、状语从句的位置及图示
- 无法进入网页版小木虫
- WideBaselineFeatureMatcher_PAMI