c语言线性链表检验是否为空,线性链表的实现(c语言)

数据结构作业:设某线性表数据元素类型为整型,以链表结构存储线性表。试编程实现:

⑴ 输入数据元素,以先进先出形式创建单链表

⑵ 销毁单链表

⑶ 线性表置空

⑷ 求线性表长度

⑸ 在第i个数据元素前插入新的元素

⑹ 删除第i个元素

⑺ 显示线性表中的全部元素

⑻ 求最大元素的值和平均值

#include

#include

/* 定义ElemType为int类型 */

typedef int ElemType;

#define OK 1

#define ERROR 0

#define flag -0

/* 单链表的结点类型 */

typedef struct LNode

{

ElemType data;

struct LNode *next;

}   LNode,*LinkList;

/* 初始化单链表 */

LinkList InitLinkList()

{

LinkList L;

L=(LinkList)malloc(sizeof(LNode));

L->next=NULL;

return L;

}

/* 清空单链表 */

void ClearLinkList(LinkList L)

{

L->next=NULL;

printf("链表已经清空/n");

}

void DestoryList(LNode *head)

{

LNode *p,*q;

p=head;

q=head->next;

while(p)

{

free(p);

p=q;

/* 使用指针前判断其非空 */

if (q)

q=q->next;

}

printf("链表销毁成功!/n");

}

/* 检查单链表是否为空 */

int LinkListEmpty(LinkList L)

{

if(L->next==NULL) return OK;

else return ERROR;

}

/* 遍历单链表 */

void LinkListTraverse(LinkList L)

{

LinkList p;

p=L->next;

if(p==NULL) printf("单链表为空表/n");

else

{

printf("链表中的元素为:/n");

while(p!=NULL)

{

printf("%d ",p->data);

p=p->next;

}

}

printf("/n");

}

/* 求单链表长度 */

int LinkListLength(LinkList L)

{

LinkList p;

int j;

p=L->next;

j=0;

while(p!=NULL)

{

j++;

p=p->next;

}

return j;

}

/* 从链表中查找元素 */

LinkList GetLinkList(LinkList L,int i)

{

LinkList p;

int j;

p=L->next;

j=1;

while(p!=NULL&&j

{

p=p->next; j++;

}

if (j==i)

return p;

else return NULL;

}

/* 从链表中查找与给定元素值相同的元素在顺序表中的位置 */

int LocateLinkList(LinkList L,ElemType x)

{

LinkList p;

int j;

p=L->next; j=1;

while ( p!=NULL && p->data != x)

{

p=p->next;

j++;

}

if(p)

return j;

else

return 0;

}

/* 向链表中插入元素 */

void LinkListInsert(LinkList L, int i, ElemType e)

{

LinkList p,s;

int j;

j=1;

p=L;

while(p&&j

{

p=p->next;

j++;

}

if(p==NULL||j>i)

printf("插入位置不正确/n");

else {s=(LNode *)malloc(sizeof(LNode));

s->data=e;

s->next=p->next;

p->next=s;

printf("%d已插入到链表中/n",e);

}

}

/* 从链表中删除元素 */

void LinkListDelete(LinkList L,int i)

{

LinkList p,q;

int j;

j=1;

p=L;

while(p->next&&j

{

p=p->next;

j++;

}

if(p->next==NULL)

printf("删除位置不正确/n");

else

{

q=p->next;

p->next=q->next;

free(q);

printf("第%d个元素已从链表中删除/n",i);

}

}

/*建立单链表*/

LinkList CreatLinkList( )

{

LinkList L=InitLinkList(),p,r;

ElemType e;

r=L;

printf("请依次输入链表中的元素,输入-0结束/n");

scanf("%d",&e);

while (e!=flag)

{

p=(LinkList)malloc(sizeof(LNode));

p->data=e;

r->next=p;

r=p;

scanf("%d",&e);

}

r->next=NULL;

return L;

}

void LinkListM(LinkList L)

{

double aver=0;

int MAX=0;

LinkList p;

p=L->next;

if(p==NULL) printf("单链表为空表/n");

else

{

while(p!=NULL)

{

aver+=p->data;

if(MAXdata)

MAX=p->data;

p=p->next;

}

printf("链表中最大元素是: %d/n",MAX);

aver=aver/LinkListLength(L);

printf("链表中元素平均值是: %f/n",aver);

}

printf("/n");

}

int scan()

{

int d;

printf("/t*********操作菜单***********/n");

printf("1.初始化 2.清空 3.求链表长度 4.检查链表是否为空/n");

printf("5.输出链表中元素 6.从链表中查找元素/n");

printf("7.从链表中查找与给定元素值相同的元素在顺序表中的位置/n");

printf("8.向链表中插入元素 9. 从链表中删除元素/n");

printf("10.建立带头结点的单链表/n");

printf("11.求链表中最大元素和平均值/n");

printf("12.销毁链表/n");

printf("其他键退出。。。。。/n");

scanf("%d",&d);

return(d);

}

void main() { int quit=0;int i,locate; ElemType e; LinkList L,p; while(!quit)    switch(scan()) {          case 1:     L=InitLinkList();     printf("/n");     break;     case 2:     ClearLinkList(L);     printf("/n");     break;     case 3:     printf("链表的长度为 %d/n/n",LinkListLength(L));     break;     case 4:     if(LinkListEmpty(L))printf("链表为空/n/n");     else       printf("链表非空/n/n");     break;     case 5:     LinkListTraverse(L);      break;     case 6:     printf("请输入待查询元素在链表中的位置:");      scanf("%d",&i);      p=GetLinkList(L,i);      if(p)       printf("链表中第%d个元素的值为:%d/n/n",i,p->data);      else       printf("查询位置不正确/n/n");      break;     case 7:     printf("请输入待查询元素的值:");      scanf("%d",&e);      locate=LocateLinkList(L,e);      if(locate)       printf("%d在链表中的位置是:%d/n/n",e,locate);      else       printf("链表中没有值为%d的元素/n/n",e);      break;     case 8:     printf("请输入插入元素的位置和值(中间以空格或回车分隔):/n");      scanf("%d%d",&i,&e);      LinkListInsert(L,i,e);      break;     case 9:     if(LinkListLength(L)==0)       printf("链表已经为空,不能删除/n/n");      else      {      printf("请输入待删除元素的位置:/n/n");       scanf("%d",&i);       LinkListDelete(L,i);     }      break;     case 10:     L=CreatLinkList();      printf("/n");     break;     case 11:     LinkListM(L);     break;    case 12:     DestoryList(L);     break;    default:     quit=1;}}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
找了很多地方都不全,最后在CSDN上用积分下载了这个,准备电赛的朋友可能会用的上的。同时供C语言初学者可以参考。包括五子棋游戏、图书管理系统等。附件内容包括C语言源码和turbo C exe文件。 清单如下: 第一部分 基础篇 001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机)界面 012 用一维数组统计学生成绩 013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 寻找指定元素的指针 025 寻找相同元素的指针 026 阿拉伯数字转换为罗马数字 027 字符替换 028 从键盘读入实数 029 字符行排版 030 字符排列 031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 用“结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 简单的文本编辑器 040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序 048 归并排序 049 基数排序 050 二叉搜索树操作 051 二项式系数递归 052 背包问题 053 顺序表插入和删除 054 链表操作(1) 055 链表操作(2) 056 单链表就地逆置 057 运动会分数统计 058 双链表 059 约瑟夫环 060 记录个人资料 061 二叉树遍利 062 浮点数转换为字符串 063 汉诺塔问题 064 哈夫曼编码 065 图的深度优先遍利 066 图的广度优先遍利 067 求解最优交通路径 068 八皇后问题 069 骑士巡游 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的迭加 076 计算高次方数的尾数 077 打鱼还是晒网 078 怎样存钱以获取最大利息 079 阿姆斯特朗数 080 亲密数 081 自守数 082 具有abcd=(ab+cd)2性质的数 083 验证歌德巴_赫猜想 084 素数幻方 085 百钱百鸡问题 086 爱因斯坦的数学题 087 三色球问题 088 马克思手稿中的数学题 089 配对新郎和新娘 090 约瑟夫问题 091 邮票组合 092 分糖果 093 波瓦松的分酒趣题 094 求π的近似值 095 奇数平方的有趣性质 096 角谷猜想 097 四方定理 098 卡布列克常数 099 尼科彻斯定理 100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 111 绘制正态分布曲线 112 求解非线性方程 113 实矩阵乘法运算 114 求解线性方程 115 n阶方阵求逆 116 复矩阵乘法 117 求定积分 118 求满足特异条件的数列 119 超长正整数的加法 第四部分 图形篇 120 绘制直线 121 绘制圆 122 绘制圆弧 123 绘制椭圆 124 设置背景色和前景色 125 设置线条类型 126 设置填充类型和填充颜色 127 图形文本的输出 128 金刚石图案 129 飘带图案 130 圆环图案 131 肾形图案 132 心脏形图案 133 渔网图案 134 沙丘图案 135 设置图形方式下的文本类型 136 绘制正多边形 137 正六边形螺旋图案 138 正方形螺旋拼块图案 139 图形法绘制圆 140 递归法绘制三角形图案 141 图形法绘制椭圆 142 抛物样条曲线 143 Mandelbrot分形图案 144 绘制布朗运动曲线 145 艺术清屏 146 矩形区域的颜色填充 147 VGA256色模式编程 148 绘制蓝天图案 149 屏幕检测程序 150 运动的小车动画 151 动态显示位图 152 利用图形页实现动画 153 图形时钟 154 音乐动画 第五部分 系统篇 155 读取DOS系统中的国家_信息 156 修改环境变量 157
16进制10进制.txt 32.txt asm.txt Crctable.txt C标志符命名源程序.txt erre.txt erre2.txt ff.txt for循环的.txt list.log N皇后问题回溯算法.txt ping.txt re.txt source.txt winsock2.txt ww.txt 万年历.txt 万年历的算法 .txt 乘方函数桃子猴.txt 乘法矩阵.txt 二分查找1.txt 二分查找2.txt 二叉排序树.txt 二叉树.txt 二叉树实例.txt 二进制数.txt 二进制数2.txt 余弦曲线.txt 余弦直线.txt 傻瓜递归.txt 冒泡排序.txt 冒泡法改进.txt 动态计算网络最长最短路线.txt 十五人排序.txt 单循环链表.txt 单词倒转.txt 单链表.txt 单链表1.txt 单链表2.txt 单链表倒序.txt 单链表的处理全集.txt 双链表正排序.txt 反出字符.txt 叠代整除.txt 各种排序法.txt 哈夫曼算法.txt 哈慢树.txt 四分砝码.txt 四塔1.txt 四塔2.txt 回文.txt 图.txt 圆周率.txt 多位阶乘.txt 多位阶乘2.txt 大加数.txt 大小倍约.txt 大整数.txt 字符串查找.txt 字符编辑.txt 字符编辑技术(插入和删除) .txt 完数.txt 定长串.txt 实例1.txt 实例2.txt 实例3.txt 小写数字转换成大写数字1.txt 小写数字转换成大写数字2.txt 小写数字转换成大写数字3.txt 小字库DIY-.txt 小字库DIY.txt 小孩分糖果.txt 小明买书.txt 小白鼠钻迷宫.txt 带头结点双链循环线性表.txt 平方根.txt 建树和遍历.txt 建立链表1.txt 扫描码.txt 挽救软盘.txt 换位递归.txt 排序法.txt 推箱子.txt 数字移动.txt 数据结构.txt 数据结构2.txt 数据结构3.txt 数组完全单元.txt 数组操作.txt 数组递归退出.txt 数组递归退出2.txt 文件加密.txt 文件复制.txt 文件连接.txt 无向图.txt 时间陷阱.txt 杨辉三角形.txt 栈单元加.txt 栈操作.txt 桃子猴.txt 桶排序.txt 检出错误.txt 检测鼠标.txt 汉字字模.txt 汉诺塔.txt 汉诺塔2.txt 灯塔问题.txt 猴子和桃.txt 百鸡百钱.txt 矩阵乘法动态规划.txt 矩阵转换.txt 硬币分法.txt 神经元模型.txt 穷举搜索法.txt 符号图形.txt 简单数据库.txt 简单计算器.txt 简单逆阵.txt 线性顺序存储结构.txt 线索化二叉树.txt 绘制圆.txt 编随机数.txt 网络最短路径Dijkstra算法.txt 自我复制.txt 节点.txt 苹果分法.txt 螺旋数组1.txt 螺旋数组2.txt 试题.txt 诺汉塔画图版.txt 读写文本文件.txt 货郎担分枝限界图形演示.txt 货郎担限界算法.txt 质因子.txt 输出自已.txt 迷宫.txt 迷宫问题.txt 逆波兰计算器.txt 逆矩阵.txt 逆阵.txt 递堆法.txt 递归桃猴.txt 递归车厢.txt 递推.txt 逻辑移动.txt 链串.txt 链栈.txt 链表十五人排序.txt 链表(递归).txt 链队列.txt 队列.txt 阶乘递归.txt 阿姆斯特朗数.txt 非递归.txt 顺序栈.txt 顺序表.txt 顺序队列.txt 骑士遍历1.txt 骑士遍历2.txt 骑士遍历回逆.txt 黑白.txt
二分查找1.c 二分查找2.c 二叉树.c 其它 单元加 单循环链表.c 单链表.c 图.c 字符 定长串.c 小写数字转为大写数字 带头结点双链循环线性表.c 底层编程 效验算法 数学问题 数据结构 数组 文件程序 求进制 汉诺塔 硬币情况 逆阵 链串.c 链栈.c 链队列.c 问题算法 顺序栈.c 顺序表.c 顺序队列.c ./其它: c语言窗体实例.zip 傻瓜递归.c 冒泡法改进.c 小字库DIY-.c 小字库DIY.c 小白鼠钻迷宫.c 扫描码.C 挽救软盘.c 汉字字模.c 神经元模型.c 穷举搜索法.c 简单数据库.c 编程汉字问题.txt 编随机数.c 试题.C 递堆法.C ./单元加: erre2.c erre.c 数组完全单元.c 栈单元加.c ./字符: 单词倒转.c 反出字符.c 回文.c 字符串查找.c 字符编辑.c 字符编辑技术(插入和删除) .c ./小写数字转为大写数字: 小写数字转换成大写数字1.c 小写数字转换成大写数字2.c 小写数字转换成大写数字3.c ./底层编程: asm.c C标志符命名源程序.c ping.c winsock2.c 时间陷阱.c 检出错误.c 检测鼠标.c ./效验算法: C.BAT CMCRC.COM Crctable.c ./数学问题: 乘法矩阵.c 凉东问题 十五人排序.c 叠代整除.c 四分砝码.c 圆周率 多位阶乘2.c 多位阶乘.c 大加数.c 大小倍约.c 大整数.c 完数.c 小孩分糖果.c 小明买书 平方根.c 数学算法 桃子猴问题 灯塔问题.c 百鸡百钱.c 简单计算器.c 苹果纠纷 递推.c 逻辑移动.c 阶乘递归.c 阿姆斯特朗数.c 黑白.c ./数学问题/凉东问题: 32.c re.c 数组递归退出2.c 数组递归退出.c ./数学问题/圆周率: 圆周率.c 狐狸圆周率.cpp ./数学问题/小明买书: 小明买书.c 小明买书.cpp ./数学问题/数学算法: 余弦曲线.c 余弦直线.c 符号图形.c 绘制圆.c ./数学问题/桃子猴问题: _notes 乘方函数桃子猴.c 桃子猴.c 猴子和桃.c 递归桃猴.c 题目.txt ./数学问题/桃子猴问题/_notes: ./数学问题/苹果纠纷: ff.c 苹果分法.c ./数据结构: 二叉排序树.c 二叉树实例.c 单链表链表正排序.c 各种排序法.c 哈夫曼算法.c 哈慢树.c 大整数.c 建树和遍历.c 排序法.c 推箱子.c 数据结构2.c 数据结构3.c 数据结构.c 无向图.c 栈操作.c 线性顺序存储结构.c 线索化二叉树.c 迷宫.c 迷宫问题.c 逆波兰计算器.c 递归车厢.c 队列.c ./数据结构/单链表: ww.c 冒泡排序.c 单链表1.c 单链表2.c 单链表.c 单链表倒序.c 单链表的处理全集.c 建立链表1.c 节点.c 质因子.c 链表十五人排序.c 链表(递归).c ./数组: 数字移动.c 数组操作.c 杨辉三角形.c 桶排序.c 矩阵转换.c 螺旋数组1.c 螺旋数组2.c ./文件程序: 实例1.c 实例2.c 实例3.c 文件加密.c 文件复制.c 文件连接.c 自我复制.c 读写文本文件.c 输出自已.c ./求进制: 16进制10进制.c 二进制数2.c 二进制数.c ./汉诺塔: 四塔1.c 四塔2.c 换位递归.c 汉诺塔2.c 汉诺塔.c 诺汉塔画图版.c 非递归.c ./硬币情况: for循环的.c 硬币分法.c ./逆阵: 简单逆阵.c 逆矩阵.c 逆阵.c ./问题算法: N皇后问题回溯算法.c 万年历 动态计算网络最长最短路线.c 矩阵乘法动态规划.c 网络最短路径Dijkstra算法.c 货郎担分枝限界图形演示.c 货郎担限界算法.c 骑士遍历 ./问题算法/万年历: 万年历.c 万年历的算法 .c ./问题算法/骑士遍历: 骑士遍历1.c 骑士遍历2.c 骑士遍历回逆.c
16进制10进制.txt 32.txt asm.txt Crctable.txt C标志符命名源程序.txt erre.txt erre2.txt ff.txt for循环的.txt list.log N皇后问题回溯算法.txt ping.txt re.txt source.txt winsock2.txt ww.txt 万年历.txt 万年历的算法 .txt 乘方函数桃子猴.txt 乘法矩阵.txt 二分查找1.txt 二分查找2.txt 二叉排序树.txt 二叉树.txt 二叉树实例.txt 二进制数.txt 二进制数2.txt 余弦曲线.txt 余弦直线.txt 傻瓜递归.txt 冒泡排序.txt 冒泡法改进.txt 动态计算网络最长最短路线.txt 十五人排序.txt 单循环链表.txt 单词倒转.txt 单链表.txt 单链表1.txt 单链表2.txt 单链表倒序.txt 单链表的处理全集.txt 双链表正排序.txt 反出字符.txt 叠代整除.txt 各种排序法.txt 哈夫曼算法.txt 哈慢树.txt 四分砝码.txt 四塔1.txt 四塔2.txt 回文.txt 图.txt 圆周率.txt 多位阶乘.txt 多位阶乘2.txt 大加数.txt 大小倍约.txt 大整数.txt 字符串查找.txt 字符编辑.txt 字符编辑技术(插入和删除) .txt 完数.txt 定长串.txt 实例1.txt 实例2.txt 实例3.txt 小写数字转换成大写数字1.txt 小写数字转换成大写数字2.txt 小写数字转换成大写数字3.txt 小字库DIY-.txt 小字库DIY.txt 小孩分糖果.txt 小明买书.txt 小白鼠钻迷宫.txt 带头结点双链循环线性表.txt 平方根.txt 建树和遍历.txt 建立链表1.txt 扫描码.txt 挽救软盘.txt 换位递归.txt 排序法.txt 推箱子.txt 数字移动.txt 数据结构.txt 数据结构2.txt 数据结构3.txt 数组完全单元.txt 数组操作.txt 数组递归退出.txt 数组递归退出2.txt 文件加密.txt 文件复制.txt 文件连接.txt 无向图.txt 时间陷阱.txt 杨辉三角形.txt 栈单元加.txt 栈操作.txt 桃子猴.txt 桶排序.txt 检出错误.txt 检测鼠标.txt 汉字字模.txt 汉诺塔.txt 汉诺塔2.txt 灯塔问题.txt 猴子和桃.txt 百鸡百钱.txt 矩阵乘法动态规划.txt 矩阵转换.txt 硬币分法.txt 神经元模型.txt 穷举搜索法.txt 符号图形.txt 简单数据库.txt 简单计算器.txt 简单逆阵.txt 线性顺序存储结构.txt 线索化二叉树.txt 绘制圆.txt 编随机数.txt 网络最短路径Dijkstra算法.txt 自我复制.txt 节点.txt 苹果分法.txt 螺旋数组1.txt 螺旋数组2.txt 试题.txt 诺汉塔画图版.txt 读写文本文件.txt 货郎担分枝限界图形演示.txt 货郎担限界算法.txt 质因子.txt 输出自已.txt 迷宫.txt 迷宫问题.txt 逆波兰计算器.txt 逆矩阵.txt 逆阵.txt 递堆法.txt 递归桃猴.txt 递归车厢.txt 递推.txt 逻辑移动.txt 链串.txt 链栈.txt 链表十五人排序.txt 链表(递归).txt 链队列.txt 队列.txt 阶乘递归.txt 阿姆斯特朗数.txt 非递归.txt 顺序栈.txt 顺序表.txt 顺序队列.txt 骑士遍历1.txt 骑士遍历2.txt 骑士遍历回逆.txt 黑白.txt

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值