下面是单链表的基本操作:

#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语言-线性表基本操作之单链表相关推荐

  1. C语言线性表之循环单链表

    #include<stdio.h> #include<stdlib.h>int typeOfLinkList;typedef struct LNode{int data;str ...

  2. 线性表基本操作,单链表的建立(头插法,尾插法)、插入、删除、遍历操作的实现(c++ 数据结构 实验二)

    大学数据结构课程的实验题目,掌握线性表的链接存储结构,用c++语言描述 一.实验要求 1.分别用头插法和尾插法建立一个含有若干结点的单链表 2.对已建立的单链表进行插入.删除.遍历输出等操作 二.代码 ...

  3. 线性表的应用 —— 单链表

    线性表的应用 -- 单链表 链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内的存储位置不一定相邻,可以给每个元素都附加一个指针域,指向下一个元素的存储位置. 像这样: 从图中可以看出,每个节点都 ...

  4. PHP数据结构之三 线性表中的单链表的PHP实现

    线性表的链式存储:用一组任意的存储单元存储线性表中的数据元素.用这种方法存储的线性表简称线性链表. 链式存储线性表的特点:存储链表中结点的一组任意的存储单元可以是连续的,也可以是不连续的,甚至是零散分 ...

  5. 数据结构(算法)-线性表2(单链表)

    为什么80%的码农都做不了架构师?>>>    /** 单链表 双链表1,空的线性表setNull(L) 2,insert 加入元素 3,根据位置查找元素 4,查找所有元素 5,删除 ...

  6. [XJTUSE]数据结构学习——第一章 线性表 1.3 单链表的实现(JAVA)

    文章目录 1.3 单链表的实现(JAVA) 1.curr指针与头结点的说明 2.插入和删除操作的说明 插入 删除 1.3 单链表的实现(JAVA) 链表是由一系列叫做表的结点(node)的对象组成的, ...

  7. java线性表合并_单链表的合并(Java实现)

    C语言能做的,Java照样可以做.但是没有指针的操作,可能使人看起来"不舒服".这个博客是为了个人学习算法和数据结构而开的,以后凡是涉及到这方面的内容,我会尽量用Java和C同时实 ...

  8. 线性表详解(静态链表、单链表、双向链表、循环链表)

    目录 申明 1. 线性表的定义 2. 线性表的抽象数据类型 3. 线性表的顺序存储结构 3. 1 顺序存储定义 3. 2 顺序存储方式 3. 3 数据长度与线性表长度区别 3. 4 地址计算方法 4. ...

  9. 链表归并成递减c语言,将递增有序单链表A和B归并成表C 递减单链表的尾插法建立和输出...

    自己辛苦成果,拿出来帮助那些数据结构没学好和C语言基础差的人 #include #include typedef struct Node { int data; struct Node *next; ...

最新文章

  1. 解决PHP Fatal error mysql_connect() mysql_query()的问题
  2. 第27章:MongoDB-索引--唯一索引
  3. 【EMV L2】SDA静态数据认证处理流程
  4. 【Kafka】Kafka使用代码设置offset值
  5. (2015秋) 软工作业成绩公布
  6. 动态规划算法经典例题_c动态规划精简例题
  7. visio保存后公式变形_固体力学中的变形分析
  8. C#实现不安装Oracle客户端访问远程服务器数据
  9. Win10 SAS9.4缺少增强型编辑器
  10. 学习Hibernate框架笔记-第3天
  11. 卸载office2010后 再安装2013 错误1706 安装程序找不到需要的文件
  12. R:首次尝试线性回归
  13. Java枚举(enum)
  14. 云计算时代的软件行业变化
  15. c++中的 trivial destructor
  16. 【HEC-RAS】02 软件下载及安装
  17. btrfs和ntfs linux5,如何选择文件系统EXT4、Btrfs 和 XFS
  18. 名词从句、定语从句、状语从句的位置及图示
  19. 无法进入网页版小木虫
  20. WideBaselineFeatureMatcher_PAMI

热门文章

  1. Dockerfile命令
  2. spring中type转换框架设计与实现
  3. UVa11389 The Bus Driver Problem(贪心)
  4. Challenges(分组、聚合、连接)
  5. C1000k 新思路:用户态 TCP/IP 协议栈
  6. 题目1025:最大报销额
  7. oracle数据库逐步学习总结【基础一】
  8. div+css实现表头固定内容滚动表格
  9. Hadoop 2.7.3 完全分布式维护-动态增加datanode篇
  10. Emmet插件使用方法总结