C语言单链表实现初始化、创建、增、删、查等基本操作

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int ElemType;
//定义单链表结构
typedef struct Node
{ElemType data;//数据域struct Node *next;//指针域,指向下一节点
} LinkList;
//函数声明(若未声明,可能会有警告甚至错误)
LinkList *initList(LinkList *L);
LinkList *createList(int len);
int insertLinkList(LinkList *L, int pos, ElemType e);
int deleteLinkList(LinkList *L, int pos, ElemType *e);
void reverseLinkList(LinkList *L);
int seachLinkList(LinkList *L, ElemType e);
int getLen(LinkList *L);
int isEmpty(LinkList *L);
void printLinkList(LinkList *L);
int main()
{LinkList *L;ElemType e;int len, pos;printf("创建元素个数:");scanf("%d", &len);printf("\n请输入:");L = createList(len);printf("当前链表所有元素:");printLinkList(L);printf("\n插入位置和插入值(中间用空格隔开):");scanf("%d%d",&pos, &e);insertLinkList(L, pos, e);printf("\n插入元素后链表所有元素:");printLinkList(L);printf("\n请输入删除元素位置:");scanf("%d",&pos);deleteLinkList(L, pos, &e);printf("\n元素%d已删除", e);printf("\n删除后链表所有元素:");printLinkList(L);printf("\n请输入查找元素:");scanf("%d",&e);if(seachLinkList(L, e) != -1){printf("\n%d位于:%d",e, seachLinkList(L, e));}else printf("\n%d未找到",e);reverseLinkList(L);printf("\n转置后链表所有元素:");printLinkList(L);return 0;
}//初始化,创建头结点
LinkList *initList(LinkList *L)
{L = (LinkList *) malloc(sizeof(LinkList));//为头结点分配空间L->next = NULL;//头结点指针域置空return L;
}
//创建指定个数的单链表
LinkList *createList(int len)
{int i;ElemType e;LinkList *L = initList(L), *r, *n;//分别定义头指针、尾指针、新指针r = L;//尾指针初始化为头指针for(i = 0;i < len;i ++){scanf("%d", &e);n = (LinkList *) malloc(sizeof(LinkList));//申请空间n->data = e;n->next = NULL;//新指针指针域置空r->next = n;//将新指针链入单链表末尾r = r->next;//尾指针往后移}return L;
}
//将元素插入指定位置
int insertLinkList(LinkList *L, int pos, ElemType e)
{if(pos < 1 || pos > getLen(L)+1) return 0;//插入位置错误LinkList *r = L, *n;n = (LinkList *) malloc(sizeof(LinkList));n->data = e;n->next = NULL;while(--pos > 0){r = r->next;//将尾指针移动到插入位置}n->next = r->next;//先把新指针(插入值)链入尾指针后一个节点r->next = n;//再把新指针(插入值)链入尾指针之后return 1;
}
//将指定位置元素删除
int deleteLinkList(LinkList *L, int pos, ElemType *e)
{if(pos < 1 || pos > getLen(L)) return 0;//删除位置错误LinkList *r = L, *d;while(--pos > 0){r = r->next;//将尾指针移动到删除位置}d = r->next;//删除元素节点*e = d->data;//保存删除元素值r->next = d->next;//将尾指针跳过删除节点链入下一个节点free(d);//释放删除节点return 1;
}
//转置单链表:采用头插法
void reverseLinkList(LinkList *L)
{LinkList *r, *p, *q;//定义尾指针(紧贴头指针)、欲插入指针、遍历指针r = L->next;//尾指针紧贴头指针p = q = r->next;//从第二个元素开始r->next = NULL;//尾指针置空while(q)//q相当于q != NULL{q = q->next;//遍历指针后移p->next = r;//欲插入指针链入尾指针之前L->next = p;//欲插入指针链入头指针之后r = p;//尾指针向前移p = q;//欲插入指针与遍历指针同步}
}
//查找指定元素,返回指定元素位序
int seachLinkList(LinkList *L, ElemType e)
{if(isEmpty(L)) return -1;int pos = 1;//位序从1开始、下标从零开始LinkList *r = L->next;while(r){if(r->data == e) return pos;//找到指定元素,返回位序r = r->next;//尾指针后移pos ++;}return -1;//遍历完成仍未找到返回-1
}
int getLen(LinkList *L)
{if(L->next == NULL) return 0;//头指针指针域为空,说明单链表不含任何元素int len = 0;LinkList *r = L->next;while(r){r = r->next;//尾指针后移len++;}return len;
}
int isEmpty(LinkList *L)
{return !L->next;//L->next == NULL亦可
}
void printLinkList(LinkList *L)
{LinkList *p;p = L->next;while(p){printf("%d ",p->data);p = p->next;}
}

运行效果图:

C语言单链表实现初始化、创建、增、删、查等基本操作(详细)相关推荐

  1. 单链表的实现与增删改查

    单链表的实现与CRUD 单链表的实现与增删改查 链表实现 结果: Hero{id=1, name='dog1', otherName='aadog1'} Hero{id=2, name='dog2', ...

  2. 韩老师——数据结构与算法—单链表的生成及增删改查操作和常见关于链表的面试题java代码实现

    话不多说直接上代码. public class SingleLinkedListDemo {public static void main(String[] args) {//测试HeroNode n ...

  3. 数据结构-链表:对链表进行初始化、增删改查

    废话少说,先上代码: #include <stdio.h> #include <stdlib.h>typedef struct Node {int data;struct No ...

  4. 单链表的实现:增删改查

    1 /* 2 *@author ? 3 *@since 2011/07/29 4 *@function 实现链表的常用操作,比较粗糙. 5 * 功能大概是:显示链表结构:查询链表:删除节点:插入结点: ...

  5. 用c语言实现单链表的初始化,建表,查找,求长度,插入,删除等操作,【YTU+2430+C语言习题+链表建立+插入+删除+输(5)...

    的打印.判断链表是否为空.计算链表长度.插入节点.删除节点.删除整个链表.(2) 线性表adt顺序存储实现中的创建.查找.插入和删除等基本操作及相关算法,线性表adt链式存储实现中单链表.循环链表和双 ...

  6. C语言-数据结构-单链表的初始化,插入和输出

    [问题描述] 设有头结点单链表,实现单链表的初始化.插入和输出算法. [输入形式] 第一行输入一个N(N大于等于1,小于1000),一个M(N大于等于1,小于1000): 第二行输入N个整数,以空格作 ...

  7. c语言单链表的创建展示

    #include <stdio.h>#include<stdlib.h> 头文件(stdlib是申请地址必要的头文件) typedef struct link{ //单链表的结 ...

  8. C语言单链表,能直接运行的代码!

    C语言单链表,实现增删改查 不废话 直接上代码,COPY就能运行 #include <stdio.h> #include <stdlib.h> /** *定义数据元素 */ t ...

  9. C++语言单链表实现荷兰旗问题

    C++语言单链表实现荷兰旗问题 一.设备及软件 VC6.0 二.语言 C++ 三.涉及的数据结构与算法 单链表.尾插法 四.问题描述 荷兰旗问题亦称三色旗问题. 这里荷兰旗用0,1,2分别表示三种颜色 ...

最新文章

  1. 推荐Chrome一款大气典雅神秘的主题 - 黑色系
  2. 重磅发布 | 阿里云视图计算,边缘计算的主“战”场
  3. php thikn_与ThinkPHP等框架结合
  4. php 多态有什么用,php面向对象多态的介绍与优势
  5. Android-入门学习笔记-JSON 解析
  6. gdb 调试带参数的程序-转
  7. 20155213 实验三《敏捷开发与XP实践》实验报告
  8. PRD文档写作详细说明(希望对大家有用)
  9. Flutter应用程序版本更新与自动升级配置方法
  10. 加权平均数的例子_加权平均数怎么算?举个具体的例子
  11. 中段尾段全段什么意思_排气管中段 尾段 全段 和芭蕉 是什么意思
  12. php实现按一下button显示的数字加1_24h只能加一次,javascript - 连续点击按钮后,数据如何不会累加显示?...
  13. 51单片机实现出租车计价器
  14. 内燃机 vs 外燃机
  15. android pc扩展屏幕分辨率,让闲置的iPad / Android平板电脑成为计算机屏幕的扩展显示!...
  16. iOS开发 设置状态栏字体颜色
  17. Java百分比格式化
  18. python开发autocad_利用Python自动化操作AutoCAD的实现
  19. 人活着的三种境界[转帖]
  20. L1 VS L2(深度学习中的L1与L2)

热门文章

  1. 运动蓝牙耳机哪个品牌好,十大跑步运动耳机品牌
  2. Magix.Cache介绍
  3. 计算机开机主机不停地重启,电脑开机几秒自动重启停不下来,这是怎么回事?...
  4. 可交换债券和可转换债券的区别
  5. python获取ppt中的备注
  6. 关于 byte 的范围
  7. byte的取值范围、8种基本类型范围
  8. 信息奥赛一本通1215:迷宫
  9. Openstack kvm win7镜像制作(转)
  10. 编写测试用例的七种方法