代码,用c++实现线性链表
#include <iostream>
#include <stdio.h>
#include <malloc.h>
using namespace std;
#define INITIALSIZE 10 // 线性表存储空间的分配量,即数组长度
#define Status int //定义返回状态
#define OK 1
#define error 0
//#define LISTINCREMENT=10;
typedef struct {
int * elem; //定义数组
int length; // 当前长度 ,线性表的元素个数,并不是数组长度
int listsize; //数组的长度
} SqList; // 俗称 顺序表
Status InitList(SqList *L);
Status ListEmpty(SqList *L);
int ListLength(SqList *L);
int getElem(SqList *L,int i);//返回i的元素
int locateElem(SqList *L,int e);//返元素的位置
Status ListInsert(SqList *L,int i,int e);
int ListDelete(SqList *L,int i);//删除第i个元素返回这个元素
void Traverse(SqList *L);//遍历列表
Status InitList(SqList * L){
L->elem=(int *)malloc(sizeof(int)*INITIALSIZE);
if (!L->elem){cout<<"分配失败"<<endl;exit(-1);}
L->length=0;
L->listsize=INITIALSIZE;
return OK;
}
Status ListEmpty(SqList * L){
if (L->length==0)return OK;
}
int ListLength(SqList * L){return L->length;}
Status ListInsert(SqList * L,int i,int e){
if (i<1||i>L->length+1){cout<<"赋值失败"<<endl;return error;}//如果输入的下表不足1,或者大于数组的长度,就返回错误
if (L->length>=L->listsize){
int * newbase=(int *)realloc(L->elem,sizeof(int)*((L->listsize<<2)+L->listsize));
if (!newbase)return error;
L->elem=newbase;
L->listsize+=(L->listsize<<2);
}
int * q=&(L->elem[i-1]);//插入位置
for(int * p=&(L->elem[L->length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++L->length;
return OK;
}
void Traverse(SqList * L){
for (int i=0;i<L->length;++i){
cout<<L->elem[i]<<" ";
}
}
int getElem(SqList *L,int i){
if (i<1||i>L->length)return error;
return L->elem[i];
}
int locateElem(SqList *L,int e){
// int *p = L;
// for (int * q=L->elem[L->length-1];q>p;++q){
// if (*q==e)return
// }
for (int i=0;i<L->length;i++){
if (L->elem[i]==e)return i;
}
return -1;
}
int ListDelete(SqList *L,int i){
if (i<1||i>L->length+1){cout<<"树枝不对"<<endl;return error;}
//删除的位置 删除之后依次前移
for (int * q=&(L->elem[i+1]);q<&(L->elem[L->length-1]);q++){
*(q-1)=*q;
}
--L->length;
return OK;
}
int main(){
SqList mm;
if (InitList(&mm)){
for (int i=1;i<=30;i++){
ListInsert(&mm,i,i);
}
Traverse(&mm);
ListDelete(&mm,2);
cout<<endl<<"删除之后"<<mm.length<<endl;
Traverse(&mm);
cout<<endl<<mm.elem[2]<<endl;
cout<<locateElem(&mm,12);
};
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
代码,用c++实现线性链表的更多相关文章
- 数据结构算法C语言实现(五)---2.3重新定义线性链表及其基本操作
一.简述 ...由于链表在空间的合理利用上和插入.删除时不需要移动等的优点,因此在很多场合下,它是线性表的首选存储结构.然而,它也存在着实现某些基本操作,如求线性表的长度时不如顺序存储结构的缺点:另一 ...
- javascript实现数据结构:线性表--线性链表(链式存储结构)
上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...
- javascript实现数据结构与算法系列:功能完整的线性链表
由于链表在空间的合理利用上和插入,删除时不需要移动等的有点,因此在很多场合下,它是线性表的首选存储结构.然而,它也存在着实现某些基本操作,如求线性表长度时不如顺序存储结构的缺点:另一方面,由于在链表中 ...
- select 函数实现 三种拓扑结构 n个客户端的异步通信 (完全图+线性链表+无环图)
一.这里只介绍简单的三个客户端异步通信(完全图拓扑结构) //建立管道 mkfifo open顺序: cl1 读 , cl2 cl3 向 cl1写 cl2 读 , cl1 cl3 向 cl2写 cl3 ...
- [C++]线性链表之顺序表<二>
/* @content 线性链表之顺序表 @date 2017-3-21 1:06 @author Johnny Zen */ /* 线性表 顺序表 链式表[带头指针/不 ...
- python算法:LinkedList(双向线性链表)的实现
LinkedList是一个双向线性链表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer).由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一 ...
- C代码实现非循环单链表
C代码实现非循环单链表, 直接上代码. # include <stdio.h> # include <stdlib.h> # include <malloc.h> ...
- 线性链表的双向链表——java实现
.线性表链式存储结构:将采用一组地址的任意的存储单元存放线性表中的数据元素. 链表又可分为: 单链表:每个节点只保留一个引用,该引用指向当前节点的下一个节点,没有引用指向头结点,尾节点的next引用为 ...
- 【二叉树->链表】二叉树结构转双向线性链表结构(先序遍历)
二叉树存储结构属于非线性链表结构,转化成线性链表结构,能简化操作和理解.然而由非线性转线性需要对整个树遍历一次,不同的遍历方式转化结果页不一样.下面以先序为例. 方法一: 递归法.递归遍历二叉树,因为 ...
- [C++]线性链表之单链表
[文档整理系列] 线性链表之单链表 /* 问题描述:线性表____链表_____单链表 @date 2017-3-7 */ #include<iostream> using namespa ...
随机推荐
- androidAndroid开发学习--Ionic+Cordova 环境搭建
我们看 Ionic 能给我们提供什么? 一个样式库,你可以使用它 来 装饰你的 HTML 网页 ,看起来 想 移动程序的 界面,什么 header .content.footer.grid.list ...
- SQL性能优化常用语句(摘录网上)
1.把trace文件导入到表中 , ) AS RowNumber,* into TableName FROM fn_trace_gettable('trace.trc', default) 2.查询C ...
- 3.30课·········Marquee标签
页面的自动滚动效果,可由javascript来实现, 但是有一个html标签 - <marquee></marquee>可以实现多种滚动效果,无需js控制. 使用marquee ...
- java 泛型的简单使用
effecttive java一直推荐使用泛型,简单的看了一下泛型的使用 package cn.com.fzk; import java.util.ArrayList; import java.uti ...
- Vim的map
linux系统下.vimrc文件(这个文件可以在家目录新建): 这个文件记录着vim的配置信息: 如: "显示行号 set number "键映射map “如按F5,在word的前 ...
- C#实现对外部程序的调用操作
测试工具,首先也是一个C#的程序,它的主要目的是: 1:获取上文应用程序的窗口句柄,继而获取TextBox句柄及Button句柄: 2:为TextBox随机填入一些字符: 3:模拟点击Button: ...
- SpringCloud之服务提供和服务调用的搭建
pom文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3 ...
- Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í??错误
启动项目的时候发现tomcat跑不起来.后台输出错误Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í?? 发现是ecli ...
- Spark- Checkpoint原理剖析
Checkpoint,是Spark 提供的一个比较高级的功能.有的时候,比如说,我们的 Spark 应用程序,特别的复杂,然后从初始的RDD开始,到最后拯个应用程序完成,有非常多的步骤,比如超过20个 ...
- Codeforces 459E Pashmak and Graph:dp + 贪心
题目链接:http://codeforces.com/problemset/problem/459/E 题意: 给你一个有向图,每条边有边权. 让你找出一条路径,使得这条路径上的边权严格递增. 问你这 ...