顺序线性表的基本操作(C语言实现)
2017-09-28 10:58
295 查看
//线性表顺序存储
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct{
int *elem; //elem表示存储空间的地址:
int length; //表示当前长度
int listsize; //当前分配的存储长度
}SqList;
//函数声明
void InitList_Sq(SqList *LI); //线性表初始化
void DestroyList(SqList *LI); //销毁线性表
void ClearList(SqList *LI ); //将L置为空表
bool ListEmpty(SqList L); //判断线性表是否为空
int ListLength(SqList L); //返回L中数据元素的个数
int GetElem(SqList L,int i); //返回第i个数据元素的值
//int LocateElem(SqList L,int e,compare());
void ListInsert(SqList *LI ,int i,int e); //在i的位置插入元素
int ListDelete(SqList *LI ,int i); //删除线性表中第i个元素
void ListTraverse(SqList L); //线性表遍历
//
//主函数
int main()
{
int val;
SqList L; //创建一个线性表
InitList_Sq(&L); //对表进行初始化
ListInsert(&L ,1,18);
ListInsert(&L ,2,3);
ListInsert(&L ,3,5);
ListInsert(&L ,4,12);
ListInsert(&L ,5,33);
printf("它的长度为:%d\n",L.length);
ListTraverse(L);
val=ListDelete(&L,3);
ListTraverse(L);
return 0;
}
//线性表初始化实现
void InitList_Sq(SqList *LI)
{
int num;
printf("请输入存储容量大小:");
scanf("%d",&num);
LI->elem=(int *)malloc(num*sizeof(int)); //为线性表分配地址;
if(!(LI->elem)) //判断是否开辟空间
{
printf("系统分配内存失败!\n");
exit(-1);
}
LI->length=0;
LI->listsize=num;
return;
}
//销毁线性表算法
void DestroyList(SqList *LI)
{
free(LI);
}
//将线性表置为空表
void ClearList(SqList *LI)
{
LI->length=0;
return ;
}
//判断线性表是否为空
bool ListEmpty(SqList L)
{
if(L.length==0)
return true;
else{
return false;
}
}
//返回L中数据元素的个数
int ListLength(SqList L)
{
return (L.length);
}
//在i的位置插入元素e
void ListInsert(SqList *LI ,int i,int e)
{
int j,temp;
if((i>((LI->length)+1))||(i<0))
{
printf("插入失败!\n");
exit(-1);
}
else{
temp=LI->elem[i-1];
LI->elem[i-1]=e;
for(j=LI->length;j>i+1;j--)
{
LI->elem[j]=LI->elem[j-1];
LI->elem[i]=temp;
}
(LI->length)++;
}
}
// 返回第i个数据元素的值
int GetElem(SqList L,int i)
{
if((i>((L.length)+1))||(i<0))
{
printf("返回失败!\n");
exit(-1);
}
else{
return(L.elem[i-1]);
}
}
//顺序表的遍历
void ListTraverse(SqList L)
{
int i;
printf("顺序表的遍历结果是:\n");
for(i=0;i<L.length;i++)
{
printf("%d\n",L.elem[i]);
}
}
//删除第i个元素,并返回删除的值
int ListDelete(SqList *LI ,int i)
{
int j,temp;
if((i>(LI->length))||(i<0))
{
printf("删除失败!\n");
exit(-1);
}
else{
temp=LI->elem[i-1];
for(j=i-1;j<LI->length-1;j++)
{
LI->elem[j]=LI->elem[j+1];
}
LI->length--;}
return temp;
}
//
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct{
int *elem; //elem表示存储空间的地址:
int length; //表示当前长度
int listsize; //当前分配的存储长度
}SqList;
//函数声明
void InitList_Sq(SqList *LI); //线性表初始化
void DestroyList(SqList *LI); //销毁线性表
void ClearList(SqList *LI ); //将L置为空表
bool ListEmpty(SqList L); //判断线性表是否为空
int ListLength(SqList L); //返回L中数据元素的个数
int GetElem(SqList L,int i); //返回第i个数据元素的值
//int LocateElem(SqList L,int e,compare());
void ListInsert(SqList *LI ,int i,int e); //在i的位置插入元素
int ListDelete(SqList *LI ,int i); //删除线性表中第i个元素
void ListTraverse(SqList L); //线性表遍历
//
//主函数
int main()
{
int val;
SqList L; //创建一个线性表
InitList_Sq(&L); //对表进行初始化
ListInsert(&L ,1,18);
ListInsert(&L ,2,3);
ListInsert(&L ,3,5);
ListInsert(&L ,4,12);
ListInsert(&L ,5,33);
printf("它的长度为:%d\n",L.length);
ListTraverse(L);
val=ListDelete(&L,3);
ListTraverse(L);
return 0;
}
//线性表初始化实现
void InitList_Sq(SqList *LI)
{
int num;
printf("请输入存储容量大小:");
scanf("%d",&num);
LI->elem=(int *)malloc(num*sizeof(int)); //为线性表分配地址;
if(!(LI->elem)) //判断是否开辟空间
{
printf("系统分配内存失败!\n");
exit(-1);
}
LI->length=0;
LI->listsize=num;
return;
}
//销毁线性表算法
void DestroyList(SqList *LI)
{
free(LI);
}
//将线性表置为空表
void ClearList(SqList *LI)
{
LI->length=0;
return ;
}
//判断线性表是否为空
bool ListEmpty(SqList L)
{
if(L.length==0)
return true;
else{
return false;
}
}
//返回L中数据元素的个数
int ListLength(SqList L)
{
return (L.length);
}
//在i的位置插入元素e
void ListInsert(SqList *LI ,int i,int e)
{
int j,temp;
if((i>((LI->length)+1))||(i<0))
{
printf("插入失败!\n");
exit(-1);
}
else{
temp=LI->elem[i-1];
LI->elem[i-1]=e;
for(j=LI->length;j>i+1;j--)
{
LI->elem[j]=LI->elem[j-1];
LI->elem[i]=temp;
}
(LI->length)++;
}
}
// 返回第i个数据元素的值
int GetElem(SqList L,int i)
{
if((i>((L.length)+1))||(i<0))
{
printf("返回失败!\n");
exit(-1);
}
else{
return(L.elem[i-1]);
}
}
//顺序表的遍历
void ListTraverse(SqList L)
{
int i;
printf("顺序表的遍历结果是:\n");
for(i=0;i<L.length;i++)
{
printf("%d\n",L.elem[i]);
}
}
//删除第i个元素,并返回删除的值
int ListDelete(SqList *LI ,int i)
{
int j,temp;
if((i>(LI->length))||(i<0))
{
printf("删除失败!\n");
exit(-1);
}
else{
temp=LI->elem[i-1];
for(j=i-1;j<LI->length-1;j++)
{
LI->elem[j]=LI->elem[j+1];
}
LI->length--;}
return temp;
}
//
相关文章推荐
- c语言实现顺序表的基本操作
- C语言实现顺序表的基本操作
- 学习笔记---线性表的基本操作---顺序存储(C语言)
- 顺序表的基本操作(C语言实现)
- C语言实现顺序表的插入、删除、查找、遍历等基本操作
- 顺序结构实现线性表的基本操作
- c语言:顺序表的实现(一) 创建,插入,删除,查找,输出等基本操作实现
- 顺序线性表的实现及操作(C语言实现)
- 学习笔记——线性表的静态分配顺序存储结构基本操作(C语言实现)
- 数据结构C语言实现线性表(顺序实现)的初始化与基本操作
- 线性表的基本操作实现 - 链表与顺序表
- 动态分配的顺序线性表的十五种操作—C语言实现
- 数组实现的线性表的基本操作2[C语言]
- 数据结构笔记(一)线性表的顺序表示和基本操作及其顺序表实现的集合运算(A-B)U(B-A)实例
- C语言实现顺序表的基本操作
- 顺序队列(循环队列)基本操作实现 C语言
- C语言实现顺序栈的基本操作
- 动态分配的顺序线性表的十五种操作—C语言实现
- 线性表之顺序表基本操作实现
- 学习笔记——线性表的动态分配顺序存储结构基本操作(C语言实现)