链表——单链表的基本运算
来源:互联网 发布:ubuntu 启动器 图标 编辑:程序博客网 时间:2024/05/18 06:20
实现单链表的基本运算:初始化、插入、删除、求表的长度、判空、释放。
(1)初始化单链表L,输出L->next的值;
(2)依次采用尾插法插入元素:输入分两行数据,第一行是尾插法需要插入的字符数据的个数,第二行是具体插入的字符数据。
(3)输出单链表L;
(4)输出单链表L的长度;
(5)判断单链表L是否为空;
(6)输出单链表L的第3个元素;
(7)输出元素a的位置;
(8)在第4个元素位置上插入‘x’元素;
(9)输出单链表L;
(10)删除L的第3个元素;
(11)输出单链表L;
(12)释放单链表L。
输入格式:
两行数据,第一行是尾插法需要插入的字符数据的个数,第二行是具体插入的字符数据。
输出格式:
按照题目要求输出
输入样例:
5
a b c d e
输出样例:
0
a b c d e
5
no
c
1
a b c x d e
a b x d e
#include<bits/stdc++.h>using namespace std;#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int Status;typedef char ElemType;typedef struct LNode *List;typedef struct LNode{ ElemType data; struct LNode *next;}LNode,*LinkList;Status InitList(LinkList &L)//初始化{ L = new LNode; L -> next = NULL; return OK;}void CreateList(LinkList &L,int n)//后插法创建链表{ LNode *p,*q; L = new LNode; L -> next = NULL; p = L; for(int i = 0;i<n;i++) { q = new LNode; cin>>q -> data; q -> next = NULL; p -> next = q; p = q; }}int Length(LinkList &L)//求长度{ LNode *p; p = L -> next; int len = 0; while(p) { p = p -> next; len ++; } return len;}Status EmptyList(LinkList &L)//判断是否为空{ if(L == NULL|| L -> next == NULL) return OK; else return ERROR;}void LocateElem(LinkList &L,ElemType e)//按值查找{ LNode *p = L -> next; int i = 0;//记录位置 while(p != NULL && p ->data != e) { p = p -> next; i++; } if(i != Length(L) && p != NULL)//找到并且不为空 cout<< i + 1<<endl;}void LocateElemth(int k,LinkList &L)//按位置查找{ LNode *p = L -> next; int i = 0; while( p!= NULL && i< k -1)//退出循环只能为空或者 i = k -1 { p = p -> next; i++; } if(i == k -1) { cout<<p ->data<<endl; }}Status InsertList(LinkList &L,int i,ElemType e)//插入指定位置指定元素{ LNode *p,*q; int j = 0; p = L; while(p&&j<i-1)//查找上一个结点并记录 { p = p->next; j++; } if(!p || j> i-1)//未找到 { return ERROR; } else { q = new LNode; q -> data = e; q -> next = p ->next; p -> next = q; return OK; }}Status ListDelete(LinkList &L,int i)//删除指定位置元素{ LNode *p,*q; p = L; int j = 0; while(p -> next && j<i-1)//找到需要删除的前驱,并让p 指向 { p = p -> next; j++; } if(p == NULL || j> i -1)// 未找到 { return ERROR; } else { q = p -> next; p -> next = q -> next; free(q); return OK; }}void ClearList(LinkList &L)//清空链表{ LNode *p; while(L -> next) { p = L -> next; L -> next = p -> next; free(p); }}void Printlist(LinkList &L)//输出{ LNode *p = L -> next; while(p) { if(p -> next != NULL)//不是最后一个 { cout<<p -> data<<" "; } else cout<<p -> data; p = p -> next; } cout<<endl;}int main(){ LinkList L; ElemType tmp; InitList(L); cout<<L->next<<endl; int num; cin>>num; CreateList(L,num); Printlist(L); cout<<Length(L)<<endl; if(EmptyList(L)) cout<<"yes"<<endl; else cout<<"no"<<endl; LocateElemth(3,L); LocateElem(L,'a'); InsertList(L,4,'x'); Printlist(L); ListDelete(L,3); Printlist(L); ClearList(L);}
阅读全文
0 0
- 链表——单链表的基本运算
- 单链表的基本运算
- 单链表的基本运算
- 单链表的基本运算
- 单链表的基本运算
- 数据结构——树的基本运算
- numpy的基本用法(一)——基本运算
- numpy的基本用法(二)——基本运算
- 单链表各种基本的运算
- C 单链表的基本运算
- 单链表的各种基本运算
- 单链表的各种基本运算
- 线性代数——基本运算
- Swift——基本运算
- 图像的基本运算——scale, rotation, translation
- 黑马程序员——C语言的基本运算
- 数据结构实践——顺序表的基本运算
- 第三周——顺序表的基本运算
- java SE 17 火推 IO流
- 实验二:命令行菜单小程序V1.0
- 图解:(调用.lib\.dll)vc2010搭载QT无法启动此程序因为计算机丢失qt5Widgetsddll
- 使用VBA把excel里所有sheets按顺序一次性copy到Word文档(选定特定列)
- 开启nginx目录文件列表显示功能
- 链表——单链表的基本运算
- 嫌访问速度慢?教你秒速打开你的WordPress
- [模板]ST表
- 【云星数据---mesos实战系列002】:mesos全分布式部署实战002--Java准备
- CSDN应该改成网购网站
- 在js中仿java的枚举类型设计实例
- 实验三:内部模块化的命令行菜单小程序V2.0
- 数据库学习4
- Android列表下拉刷新操作