C链表(顺序表、静态链表区别)
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 1000 //线性表存储空间的初始分配量
#define LISTINCRESEMENT 100 //线性表存储空间的分配增量
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int elemType;//元素类型
typedef struct
{ elemType *List;//线性表首地址 int length;//当前的长度 int listsize;//当前分配的存储容量,以elemType为单位
} SqList; void AgainMalloc(SqList *L)//空间不够时重新分配空间的函数
{ elemType *newbase;//分配一个临时基址 newbase=(elemType *)realloc(L->List,(L->listsize+LISTINCRESEMENT)*sizeof(elemType)); if(!newbase) exit(OVERFLOW); L->List=newbase; L->listsize+=LISTINCRESEMENT;
} //初始化一个空的线性表
int InitList_Sq(SqList *L)
{ L->List=(elemType *)malloc(LIST_INIT_SIZE*sizeof(elemType)); if(!L->List)exit(OVERFLOW);//overflow L->length=0;//初始表为空表 L->listsize=LIST_INIT_SIZE;//初始表的存储容量,为LIST_INIT_SIZE个elemType单位 return OK;
}
//求表中元素的个数
int ListLength(SqList *L)
{ return L->length;
} //遍历顺序表
void TraverseList(SqList *L)
{ int i; for(i=0; i<L->length; i++) { printf("%d ",L->List[i]); } printf("\n"); return;
}
//向表头插入元素
void InsertFirst(SqList *L,elemType e)
{ int i; if(L->length>=L->listsize) AgainMalloc(L); for(i=L->length-1; i>=0; i--) L->List[i+1]=L->List[i]; L->List[0]=e; L->length++; return;
} //向表尾插入元素
void InsertLast(SqList *L,elemType e)
{ if(L->length>=L->listsize) AgainMalloc(L); L->List[L->length]=e; L->length++; return;
}
//在表中第pos个位置之前插入新元素e
int Insert_Sq(SqList *L,elemType e,int pos)
{ int i; if(pos<1||pos>L->length+1) return ERROR; if(L->length>=L->listsize)//存储空间不够,要分配新的空间 AgainMalloc(L); for(i=L->length-1; i>=pos-1; i--) L->List[i+1]=L->List[i]; L->List[pos-1]=e; L->length++; return OK;
}
//查找给出元素的位置,若存在,给出位置(从1开始算);若不存在,返回-1
void Search(SqList *L,elemType e)
{ int i; for(i=0; i<L->length; i++) { if(L->List[i]==e) { printf("找到,%d在第%d个位置\n",e,i+1); return; } } printf("没找到\n"); return;
}
//删除第pos个元素,并返回其值
elemType DeleteElem(SqList *L,int pos)
{ int i; elemType temp; if(pos<1||pos>L->length) { printf("pos值越界\n"); exit(1); } temp=L->List[pos-1]; for(i=pos; i<L->length; i++) L->List[i-1]=L->List[i]; L->length--; return temp;
}
//判断线性表是否为空,为空返回1,不为空返回0
int isEmpty(SqList *L)
{ if(L->length==0) return 1; else return 0;
} //顺序表的逆置
void Inverse(SqList *L)
{ int low=0,high=L->length-1; elemType temp; int i; for(i=0; i<L->length/2; i++) { temp=L->List[low]; L->List[low++]=L->List[high]; L->List[high--]=temp; }
} void MergeList(SqList *La,SqList *Lb,SqList *Lc)
{ //elemType *pa=La->List;elemType *pb=Lb->List; Lc->listsize=Lc->length=La->length+Lb->length; Lc->List=(elemType *)malloc(sizeof(elemType)); if(!Lc->List) exit(OVERFLOW); int i=0,j=0,k=0; while(i<La->length&&j<Lb->length) { if(La->List[i]<=Lb->List[j]) { Lc->List[k++]=La->List[i++]; } else { Lc->List[k++]=Lb->List[j++]; } } while(i<La->length) { Lc->List[k++]=La->List[i++]; } while(j<Lb->length) { Lc->List[k++]=Lb->List[j++]; }
}
int main()
{ SqList list1; InitList_Sq(&list1); int length; scanf("%d",&length); int i; elemType temp; for(i=0; i<length; i++) { scanf("%d",&temp); InsertLast(&list1,temp); } printf("创建好的线性表La="); TraverseList(&list1);//创建好的顺序表 int pos; scanf("%d%d",&temp,&pos); Insert_Sq(&list1,temp,pos); printf("插入一个元素后的线性表La="); TraverseList(&list1);//插入一个数字后的线性表 scanf("%d",&pos); DeleteElem(&list1,pos); printf("删除一个元素后的线性表La="); TraverseList(&list1); scanf("%d",&temp); Search(&list1,temp);//查找元素 printf("逆置后的线性表La="); Inverse(&list1); TraverseList(&list1); SqList list2; InitList_Sq(&list2); scanf("%d",&length); for(i=0; i<length; i++) { scanf("%d",&temp); InsertLast(&list2,temp); } SqList list3; MergeList(&list1,&list2,&list3); printf("合并La和Lb后的线性表="); TraverseList(&list3); return 0;
} //顺序表的实现,采用的是结构体成员中的数组实现
<pre name="code" class="cpp">#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>//创建简单静态链表
typedef struct node{int data;struct node *next;
}Node,*pNode;int main()
{pNode Head,p;Node a,b,c;a.data=1;b.data=2;c.data=3;Head=&a;a.next=&b;b.next=&c;c.next=NULL;p=Head;do{printf("%d ",p->data);p=p->next;}while(p!=NULL);return 0;
}
//利用结构体数组实现
C链表(顺序表、静态链表区别)相关推荐
- 从多个角度分析顺序表和链表区别和特点
一. 前言 顺序表和链表由于存储结构上的差异,导致他们有不同的特点,从而适用于不同的场景.虽然他们都属于线性表,但他们的存储结构有着本质的不同: 1. 线性表存储数据,需要预先申请一块存储空间,然后将 ...
- 链表和顺序表的一些区别
顺序表与链表是非常基本的数据结构,它们可以被统称为线性表. 线性表(Linear List)是由 n(n≥0)个数据元素(结点)a[0],a[1],a[2]-,a[n-1] 组成的有限序列. 顺序表和 ...
- 2.6顺序表和链表的优缺点(区别、特点)详解
顺序表和链表由于存储结构上的差异,导致它们具有不同的特点,适用于不同的场景.本节就来分析它们的特点,让读者明白 "在什么样的场景中使用哪种存储结构" 更能有效解决问题. 通过系统地 ...
- python列表和链表的区别_顺序表和链表的区别
一.从操作上角度 顺序表和链表都具有增.删.查.改的相同功能,但算法复杂度却不相同. (1)增:顺序表往指定位置,不覆盖的添加一个值,后面的值日要往后移动,算法复杂度为O(n):链表往指定位置添加一个 ...
- 高级线性表——静态链表(最全静态链表解读)
写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...
- 数据结构之线性表(顺序表和链表)
线性表 首先线性表的定义就是:零个或多个数据元素的有限序列. 列如高考前每个班级排队照准考证,这个队伍就可以看做一个线性表,大家都井然有序的排着队,是一个有限的序列,一个班就那么几十个人,而且每个人之 ...
- 《数据结构》顺序表与链表
目录 一.线性表 线性表简介 二.顺序表 1.定义顺序表类 2.功能实现: 打印顺序表 在pos位置新增元素 判定是否包含某个元素 查找某个元素对应的位置 获取pos位置的元素 给 pos 位置的元素 ...
- 线性表、顺序表和链表,你还分不清?
摘要:其实说实话,可能很多人依然分不清线性表,顺序表,和链表之间的区别和联系! 本文分享自华为云社区<程序员必会自己设计线性表(顺序表.链表)>,原文作者:bigsai. 前言 其实说实话 ...
- 【顺序表和链表】实现增删查改数据结构 OJ题编程
目录 线性表 一.顺序表 1.使用顺序表MyArrayList增删查改 MyArrayList.java TestDemo.java 二.链表 1.带头 / 不带头 循环 / 非循环 2.创建链表并访 ...
- java数据结构与算法之顺序表与链表深入分析
转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结 ...
最新文章
- python 读取excel 内的中文显示为unicode 编码
- wxWidgets:wxTreeListCtrl类用法
- sql where子查询5中字句的使用顺序
- VS2010中添加lib库引用
- nginx中的nginx.conf.default配置
- 建立、遍历二叉树(二叉链表)
- 2022年考研计算机-数据库原理8-11章
- 拓端tecdat|Python中的Apriori关联算法-市场购物篮分析
- UVA 12161 Ironman Race in Treeland (树分治)
- netcore读取json文件_NetCore 对Json文件的读写操作
- 计算机专业考研电路原理,2016年南开大学综合基础课(模拟电路、数字电路、计算机原理)考研试题.pdf...
- 语义分割|学习记录(4)膨胀卷积(空洞卷积 )
- 淘宝教育视频加速观看(在淘宝教育上看学习视频,需要加速,在谷歌浏览器上安装视频加速插件)
- python dataframe是什么_什么是Pandas的DataFrame?
- 图(Graph)详解 - 数据结构
- 开发人员troubleshooting的方式
- Photoshop-颜色的调整
- 编程实战(4)——python识别图像中的坐标点并保存坐标数据
- 网校搭建9:微信登录
- 咖啡技术培训:6款创意咖啡拿铁教程
热门文章
- php5.4环境升级,CentOS环境中编译升级PHP至5.4版本记录
- python time智能等待_Python Selenium智能等待
- 树莓派跑php,在树莓派4上部署nginx+php
- centos右上角wired图标消失有效解决方案【转载】
- 如何计算实际物理地址?
- python中list是什么类型_Python中的list数据类型
- html中什么是语义,html – “语义正确”是什么意思?
- python转换函数使用_Python Socket模块中的IP转换函数
- 2019年Java初级和高级部分的技术面试
- v5系列服务器后面板不存在以下哪款指示,群晖RS10613xs+ NAS服务器后面板简介