线性表的顺序存储和链式存储的实现(C)
//线性表的顺序存储
#include <stdio.h>
typedef int DataType;
#define MaxSize 15
//定义顺序表
typedef struct
{
DataType List [MaxSize];
int Size;
}Slist;
//初始化顺序表
void ListInit(Slist * S)
{
S->Size=0;
}
//插入数据
int ListInsert(Slist *S ,int i,DataType x)
{ int j;
if(i<0||i>S->Size)
{
printf("插入位置不正确!");
return 0;
}
else
{
for(j=S->Size;j>i;j--)
{
S->List[j]=S->List[j-1];
}
S->List[i]=x;
S->Size++;
return 1;
}
}
//取得元素个数
int ListLength(Slist *S)
{
return S->Size;
}
//删除元素
int ListDelete(Slist *S,int i,DataType *x)
{ int j;
if(i<0||i>S->Size-1)
{
printf("删除位置不正确!");
return 0;
}
else
{ //保存删除的数据到x所指的变量中;
*x=S->List[i];
for(j=i;j<S->Size-1;j++)
{
S->List[j]=S->List[j+1] ;
}
S->Size--;
return 1;
}
}
//取得顺序表中的元素
int ListGet(Slist *S,int i,DataType *x)
{
if(i<0||i>S->Size-1)
{
printf("没有这个元素!");
}
else
{
*x=S->List[i];
return 0;
}
}
//主函数
int main ()
{
//定义一个结构体变量
Slist mylist;
int x,b,i;
//初始化
ListInit(&mylist);
//插入数据
for(i=0;i<10;i++)
ListInsert(&mylist,i,i+6);
//取得数据元素个数
b=ListLength(&mylist);
printf("顺序表中的元素个数为:");
printf("%d \n",b);
//取得插入的数据
for(i=0;i<ListLength(&mylist);i++)
{
ListGet(&mylist,0,&x);
printf("%d \n",x);
}
return 0;
}
//线性表的链式存储
#include<stdio.h>
#include<malloc.h>
//定义链式表的结构体
typedef int DataType ;
typedef struct snode
{ DataType data;
struct snode *next;
} Lnode;
//进行初始化
void ListInit(Lnode **head)
{
*head=(Lnode*)malloc(sizeof(Lnode)); //头指针
(*head)->next=NULL;
}
//插入数据
int ListInsert(Lnode *head,int i,DataType x)
{
int j;
Lnode *p,*q;
p=head;
j=-1;
while(p->next!=NULL&&j<i-1)
{
p=p->next;
j++;
}
if(j!=i-1)
{
printf("插入的位置不对,请重新插入");
return 0;
}
q=(Lnode*)malloc(sizeof(Lnode)); //申请一个节点
q->data=x;
q->next=p->next;
p->next=q;
return 1;
}
//取得元素个数
int ListLength(Lnode *head)
{
Lnode *p;
int size=0;
p=head;
while(p->next!=NULL)
{
p=p->next;
size++;
}
return size;
}
//删除数据
int ListDelete(Lnode *head,int i,DataType *x)
{
Lnode *p,*q;
int j;
p=head;
j=-1;
while(p->next!=NULL&&j<i)
{
p=p->next;
j++;
}
if(j!=i-1)
{
printf("删除的位置不对!");
return 0;
}
q=p->next;
*x=p->data;
p->next=p->next->next;
free(q);
return 1;
}
//取得元素
int ListGet(Lnode* head,int i,DataType *x)
{
Lnode *p;
int j;
p=head;
j=-1;
while(p->next!=NULL&&j<i)
{
p=p->next;
j++;
}
if(j!=i)
{
printf("取元素位置参数有误!");
return 0;
}
*x=p->data;
return 1;
}
//销毁数据链
void ListDestroy(Lnode **head)
{
Lnode *p,*q;
p=*head;
while(p!=NULL)
{ q=p;
p=p->next;
free (q);
}
*head=NULL;
}
//主函数
void main ()
{
Lnode *mylist;
int i,x,s;
//初始化链表
ListInit(&mylist);
//插入数据
for(i=0;i<10;i++)
ListInsert(mylist,i,i+1);
//取得数据个数
s= ListLength(mylist);
printf("元素个数为:%d \n",s);
//取得所有数据
for(i=0;i<ListLength(mylist);i++)
{
ListGet(mylist,i,&x) ;
printf("%d\n",x);
}
}
线性表的顺序存储和链式存储的实现(C)的更多相关文章
- 数据结构导论 四 线性表的顺序存储VS链式存储
前几章已经介绍到了顺序存储.链式存储 顺序存储:初始化.插入.删除.定位 链式存储:初始化.插入.删除.定位 顺序存储:初始化 strudt student{ int ID://ID char nam ...
- 算法与数据结构(一) 线性表的顺序存储与链式存储(Swift版)
温故而知新,在接下来的几篇博客中,将会系统的对数据结构的相关内容进行回顾并总结.数据结构乃编程的基础呢,还是要不时拿出来翻一翻回顾一下.当然数据结构相关博客中我们以Swift语言来实现.因为Swift ...
- 线性表的顺序存储和链式存储c语言实现
一.线性表的顺序存储 typedef int ElemType;typedef struct List { ElemType *data;//动态分配 ,需要申请空间 int length; }Lis ...
- 线性表的Java实现--链式存储(单向链表)
单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始. 链式存储结构的线性表将采用一组任意的存储单元存放线性表中的数据元素.由于不需要按顺序存储,链表在 ...
- c数据结构 -- 线性表之 复杂的链式存储结构
复杂的链式存储结构 循环链表 定义:是一种头尾相接的链表(即表中最后一个结点的指针域指向头结点,整个链表形成一个环) 优点:从表中任一节点出发均可找到表中其他结点 注意:涉及遍历操作时,终止条件是判断 ...
- 线性表的Java实现--链式存储(双向链表)
有了单向链表的基础,双向链表的实现就容易多了. 双向链表的一般情况: 增加节点: 删除节点: 双向链表的Java实现: package com.liuhao.algorithm; publi ...
- C 数据结构1——线性表分析(顺序存储、链式存储)
之前是由于学校工作室招新,跟着大伙工作室招新训练营学习数据结构,那个时候,纯碎是小白(至少比现在白很多)那个时候,学习数据结构,真的是一脸茫然,虽然写出来了,但真的不知道在干嘛.调试过程中,各种bug ...
- Java实现线性表-顺序表示和链式表示
顺序表示和链式表示的比较: 1.读写方式:顺序表可以顺序存取,也可以随机存取:链表只能从表头顺序存取元素: 2.逻辑结构与物理结构:顺序存储时,逻辑上相邻的元素其对应的物理存储位置也相邻:链式存储时, ...
- 队列的顺序存储与链式存储c语言实现
一. 队列 1.队列定义:只允许在表的一端进行插入,表的另一端进行删除操作的线性表. 2.循环队列:把存储队列的顺序队列在逻辑上视为一个环. 循环队列状态: 初始时:Q.front=Q.rear=0 ...
随机推荐
- [LUOGU] 1090 合并果子
题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...
- 【实用工具】Teleport Pro爬取整个网站镜像到本地
1. 使用Teleport Pro可以完全或部分下载一个网站上的内容,在硬盘上创建一个与原网站完全相同的镜象,使用户能够离线浏览 Teleport Pro的安装以及基本使用 在菜单栏Project下得 ...
- free指令的说明
CentOS 6.x系统中的freefree [-b|-k|-m|-g|-h] [-l] [-o] [-t] [-s delay] [-c count] [-V] -b #-k,-m,-g 以单位by ...
- sklearn 快速入门教程
1. 获取数据 1.1 导入sklearn数据集 sklearn中包含了大量的优质的数据集,在你学习机器学习的过程中,你可以通过使用这些数据集实现出不同的模型,从而提高你的动手实践能力,同时这个过程也 ...
- Python语言程序设计之三--列表List常见操作和错误总结
最近在学习列表,在这里卡住了很久,主要是课后习题太多,而且难度也不小.像我看的这本<Python语言程序设计>--梁勇著,列表和多维列表两章课后习题就有93道之多.我的天!但是题目出的非常 ...
- google F12
谷歌浏览器(Google Chrome)开发调试详细介绍 博客分类: 前端 浏览器chromegoogle调试开发 很多Web前台开发者都喜欢这种浏览器自带的开发者工具,这对前台设计.代码调试很大帮 ...
- JAVA连接MYSQL8.0问题
title: java连接mysql8.0问题 date: 2018-07-08 19:27:38 updated: tags: description: keywords: comments: im ...
- JMeter学习笔记21-如何添加思考时间
本文来介绍,JMeter如何插入思考时间.前面介绍过一个真实的性能测试场景,是需要加入思考时间,来模拟真实用户行为.本文就来介绍,如何在三个请求之间添加思考时间. 1. 在Test Plan下新建一个 ...
- Flask+ Angularjs 实例: 创建博客
允许任何用户注册 允许注册的用户登录 允许登录的用户创建博客 允许在首页展示博客 允许登录的用户退 后端 Flask-RESTful - Flask 的 RESTful 扩展 Flask-SQLAlc ...
- BZOJ3611 [Heoi2014]大工程 【虚树】
题目 国家有一个大工程,要给一个非常大的交通网络里建一些新的通道. 我们这个国家位置非常特殊,可以看成是一个单位边权的树,城市位于顶点上. 在 2 个国家 a,b 之间建一条新通道需要的代价为树上 a ...