线性表的顺序表示及实现(C语言编写)
来源:互联网 发布:linux mac配置文件 编辑:程序博客网 时间:2024/05/18 07:23
#include<stdio.h>
#include<malloc.h> //注意这个分配地址的头文件必须得加
#define INITIAL_SIZE 100 //定义线性表的初始大小
#define INCREACEMENT 10 //定义线性表的分配增量
//定义一个线性表结构
struct List
{
int *Elem; //线性表的基址
int Length; //当前长度
int Allocate_size; //当前分配的容量
}*L;
//初始化线性表
void Init_List(List &L)
{
L.Elem=(int *)malloc(INITIAL_SIZE* sizeof(int)); //分配基地址
if (!L.Elem ) return;
L.Length =0; //初始长度为0
L.Allocate_size =INITIAL_SIZE; //初始分配的大小为100
}
//向线性表中插入一个数
void InsertInto_List(List &L,int i,int e)
{
int *p,*q;
if (i>L.Length+1 || i<1)return; //先判断要插入的序号在不在线性表长度之内
if(L.Length>=L.Allocate_size) //如果线性表的长度大于等于分配的大小时,需重新分配线性表大小
{
int *newbase=(int *)realloc(L.Elem ,(L.Length +INCREACEMENT)*sizeof(int));
if (!newbase)return;
L.Elem =newbase; //基地址改变
L.Allocate_size +=INCREACEMENT; //分配的大小加倍
}
q=&(L.Elem [i-1]); //要插入的位序
for (p=&(L.Elem [L.Length-1]);p>=q;p--) //循环实现要插入位置以后的数都要后移一位
{
*(p+1)=*p;
}
*q=e; //给要插入的位序赋值要插入的值
L.Length +=1; //线性表加1
}
//删除线性表中一个数
void delete_List(List &L,int i,int &e)
{
int *p,*q;
if (i<1||i>L.Length )return ; //先判断要删除的位序的值是否在线性表中
else
{
p=&L.Elem [i-1]; //要删除的位序
e=*p; //将删除的数赋值给e
q=L.Elem +L.Length -1; //线性表最后的位序
for (++p;p<=q;++p)*(p-1)=*p; //循环实现删除位序后的数据前移一位
--L.Length ; //线性表长度减一
}
}
//实现两个数相比较
bool compare(int a,int b)
{
if (a==b)return true;
else return false;
}
//查找一个数在线性表中的位序
int Locate_List(List &L,int e)
{
for (int i=1;i<L.Length;i++ )
{
if (compare(e,L.Elem[i]))
return i;
}
return 0;
}
void main()
{
//要插入的值
int InsertNum=89;
int SeletNum=76;
int compareNum=76;
int returnValue; //要返回的值
//注意要首先初始化L,因为一开始L是不指向任何地址的,
//只有malloc一个地址给他,L才指向一个有意义的地址,*L才能真正得到一个struct List,之后的所有对L的使用才有意义
L=(List *)malloc(sizeof(struct List));
Init_List(*L); //初始化线性表
//插入数据
InsertInto_List(*L,1,InsertNum);
InsertInto_List(*L,2,InsertNum);
InsertInto_List(*L,3,SeletNum);
delete_List(*L,2,returnValue); //删除数据
int Locate= Locate_List(*L,InsertNum); //查找一个数在线性表中的位序
printf("%d 在线性表中的位序为: %d\n",compareNum,Locate); //输出查找到的位序
#include<malloc.h> //注意这个分配地址的头文件必须得加
#define INITIAL_SIZE 100 //定义线性表的初始大小
#define INCREACEMENT 10 //定义线性表的分配增量
//定义一个线性表结构
struct List
{
int *Elem; //线性表的基址
int Length; //当前长度
int Allocate_size; //当前分配的容量
}*L;
//初始化线性表
void Init_List(List &L)
{
L.Elem=(int *)malloc(INITIAL_SIZE* sizeof(int)); //分配基地址
if (!L.Elem ) return;
L.Length =0; //初始长度为0
L.Allocate_size =INITIAL_SIZE; //初始分配的大小为100
}
//向线性表中插入一个数
void InsertInto_List(List &L,int i,int e)
{
int *p,*q;
if (i>L.Length+1 || i<1)return; //先判断要插入的序号在不在线性表长度之内
if(L.Length>=L.Allocate_size) //如果线性表的长度大于等于分配的大小时,需重新分配线性表大小
{
int *newbase=(int *)realloc(L.Elem ,(L.Length +INCREACEMENT)*sizeof(int));
if (!newbase)return;
L.Elem =newbase; //基地址改变
L.Allocate_size +=INCREACEMENT; //分配的大小加倍
}
q=&(L.Elem [i-1]); //要插入的位序
for (p=&(L.Elem [L.Length-1]);p>=q;p--) //循环实现要插入位置以后的数都要后移一位
{
*(p+1)=*p;
}
*q=e; //给要插入的位序赋值要插入的值
L.Length +=1; //线性表加1
}
//删除线性表中一个数
void delete_List(List &L,int i,int &e)
{
int *p,*q;
if (i<1||i>L.Length )return ; //先判断要删除的位序的值是否在线性表中
else
{
p=&L.Elem [i-1]; //要删除的位序
e=*p; //将删除的数赋值给e
q=L.Elem +L.Length -1; //线性表最后的位序
for (++p;p<=q;++p)*(p-1)=*p; //循环实现删除位序后的数据前移一位
--L.Length ; //线性表长度减一
}
}
//实现两个数相比较
bool compare(int a,int b)
{
if (a==b)return true;
else return false;
}
//查找一个数在线性表中的位序
int Locate_List(List &L,int e)
{
for (int i=1;i<L.Length;i++ )
{
if (compare(e,L.Elem[i]))
return i;
}
return 0;
}
void main()
{
//要插入的值
int InsertNum=89;
int SeletNum=76;
int compareNum=76;
int returnValue; //要返回的值
//注意要首先初始化L,因为一开始L是不指向任何地址的,
//只有malloc一个地址给他,L才指向一个有意义的地址,*L才能真正得到一个struct List,之后的所有对L的使用才有意义
L=(List *)malloc(sizeof(struct List));
Init_List(*L); //初始化线性表
//插入数据
InsertInto_List(*L,1,InsertNum);
InsertInto_List(*L,2,InsertNum);
InsertInto_List(*L,3,SeletNum);
delete_List(*L,2,returnValue); //删除数据
int Locate= Locate_List(*L,InsertNum); //查找一个数在线性表中的位序
printf("%d 在线性表中的位序为: %d\n",compareNum,Locate); //输出查找到的位序
}
输出的截图:
建议:在编写过程中要把struct 对象*L初始化,因为一开始L是不指向任何地址的,只有malloc一个地址给他,L才指向一个有意义的地址,*L才能真正得到一个struct List,之后的所有对L的使用才有意义。
- 线性表的顺序表示及实现(C语言编写)
- 线性表的顺序表示(C语言实现)
- 线性表的顺序表示和实现(C语言描述)
- C语言实现顺序线性表的表示、插入、删除
- 线性链表的表示以及实现(C语言编写)
- 线性表的顺序表示及实现
- C语言 数据结构 线性表的顺序表示
- [C语言][数据结构]基础的线性表的顺序表示和实现
- 线性表的顺序实现(C语言)
- 线性表的顺序实现(c语言)
- 线性表之顺序表示及实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示与实现
- 线性表的顺序表示和实现
- 线性表的顺序表示与实现
- iPhone之网络编程初体验-简单的聊天程序
- iPhone之使用Cocos2d来开发简单的IPhone游戏教程
- Ubuntu 11.10源
- 插入排序
- iPhone之开发资源汇总
- 线性表的顺序表示及实现(C语言编写)
- IRC client
- 响应时间2/5/10原则 软件测试2-8原则(2/8原则,二八原则)
- 关于《在COM中使用数组参数》的提醒
- 如何快速成为javascript高手?
- 学习Java,需要学习哪些内容?(转载于老刘博客)
- 联想笔记本电脑开机后,两声短响,自动然后关机的原因
- bash应用实例--交互式进程(如telnet)的自动处理脚本
- 7个让Web页面布局成为败笔的设计误区