单链表的基本操作
来源:互联网 发布:韩国看视频软件 编辑:程序博客网 时间:2024/06/05 03:59
单链表的创建、尾插法插入、删除、查找、元素个数、打印单链表等操作
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define TRUE 1
#define FLASE 0
typedef int Status;
typedef int ElemType; //Status、ElemType为整型的别名
typedef struct LNode{ //定义结构体类型的节点
ElemTypedate; //数据域 保存结点的值
structLNode *next; //指针域
}LNode,*LinkList; //结点的类型
LinkList LinkCreat(){ //尾插法建表
intdate;
LNode*head,*p,*q;
head=p=(LNode*)malloc(sizeof(LNode)); //分配一个LNode类型的空间 并将其首地址存放在指针变量head(恒不变)和p中
p->next=NULL;
while(1){
scanf("%d",&date); //输入元素的值
if(date==12580)break; //出现12580时结束输入
q=(LNode*)malloc(sizeof(LNode)); //分配一个LNode类型的空间 并将其地址存放在中间指针变量q中
q->date=date; //数据域赋值
q->next=p->next; //相当于q->next=NULL
p->next=q; //连接两个结点
p=q; //相当于p->next=NULL
}
return(head); //返回头指针head
}
void printlist(LNode *L){ //打印链表 验证结果
LNode*p;
p=L->next; //p指向第一个元素
while(p!=NULL){ //遍历 打印链表
printf("%d",p->date);
p=p->next;
}
}
Status ListInsert_L(LinkList &L){ //插入函数
LinkListp,s;
ElemTypei,j,e;
scanf("%d%d",&i,&e); //在第i个元素位置插入e
p=L;j=0;
while(p&&j<i-1){ //寻找第i-1个结点
p=p->next;
++j;
}
if(!p||j>i-1)returnERROR; //i小于1或者大于表长加1
s=(LinkList)malloc(sizeof(LNode)); //生成新结点
s->date=e;s->next=p->next; //将元素插入到L中
p->next=s;
printlist(L); //打印链表 验证结果
printf("\n");
}
Status ListDelete_L(LinkList &L){ //删除函数
LinkListp,q; //定义指针变量p、q
ElemTypei,j;
scanf("%d",&i); //删除第i个元素
p=L;j=0;
while(p->next&&j<i-1){ //寻找第i个元素 并使p指向其前趋
p=p->next;
++j;
}
if(!p||j>i-1)returnERROR; //删除位置不合理
q=p->next;p->next=q->next; //删除并释放结点
free(q);
printlist(L);
printf("\n");
}
Status GetElem_L(LinkList L){ //查找第i个元素 存在则输出
LinkListp;
ElemTypei,j,e;
scanf("%d",&i);
p=L->next;j=0; //p指向第一个元素
while(p&&j<i-1){ //寻找第i-1个结点
p=p->next;
++j;
}
if(!p||j>i)returnERROR; //第i个元素不存在
e=p->date; //取出第i个元素
printf("%d\n",e); //输出第i个元素
}
Status ListLength(LinkList L){ //返回链表长度
LNode*p;
Statusi=0;
p=L->next; //p指向第一个元素
while(p!=NULL){ //遍历 计算出链表中元素的个数
i++;
p=p->next;
}
returni;
}
void LocateElme(LinkList L){
LNode*p;
Statuse; //输出链表中比某个值相比较成功的元素序列号
printf("标准数值为:");
scanf("%d",&e);
Statusi=1;
p=L->next; //p指向第一个元素
while(p!=NULL){ //遍历 比较函数
if(p->date>=e){
p=p->next;
i++;
}
else
break; //找到这样的数 跳出循环
}
if(i>ListLength(L))
printf("不存在这样的值!\n");
else{
printf("符合条件的元素位序为:\n") ;
printf("%d\n",i);
}
}
int main(){ //主函数
LinkListL;
printf("请输入链表元素(出现12580时结束):\n");
L=LinkCreat(); //输入链表元素
printf("此链表的元素个数为:\n");
printf("%d\n",ListLength(L)); //输出链表中元素的个数
printf("输出链表中第一次出现比标准数小的序列号:\n");
LocateElme(L); //输出简单的比较函数
printf("请输入插入元素的序列号和值:\n");
ListInsert_L(L); //链表插入函数
printf("请输入要删除元素的序列号:\n");
ListDelete_L(L); //链表删除函数
printf("请输入要查找元素的序列号:\n");
GetElem_L(L); //链表查找函数
return0;
}
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作!
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- Vue 组件之间的引入
- Windows安装VueJs环境
- 715. Range Module
- MQTT协议之moquette 安装使用
- 给新入坑的程序员十条忠告
- 单链表的基本操作
- 详解nodejs中express搭建权限管理系统
- 正则表达式的贪婪匹配与懒惰匹配
- 随笔 | Nessus 更新插件
- 网站测试流程、要求及测试报告
- Springboot使用定时任务,Spring Schedule
- 区间DP :Light OJ 1031
- 关于字符串的截取问题
- MySQL JOIN原理