问:数据结构 顺序表的五种算法写成能执行的c语言程序
问:数据结构顺序表的五种算法写成能执行的c语言程序5种算法:初始化,取值,查找,插入,删除要求:有主函数调用...
问:数据结构 顺序表的五种算法写成能执行的c语言程序
5种算法:初始化,取值,查找,插入,删除
要求:有主函数调用 展开
5种算法:初始化,取值,查找,插入,删除
要求:有主函数调用 展开
1个回答
展开全部
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define Init_size 10 //线性表存储空间的初始分配量
#define Increment 2 //线性表存储空间的分配增量
typedef struct SqList
{
int *elem;
int length; //当前长度
int listsize; //当前分配的存储容量
}SqList;
bool InitList(SqList *L); //初始化
bool ListInsert(SqList *L, int i, int e); //插入
bool ListDelete(SqList *L, int i, int *e); //删除
bool ListTraverse(SqList *L); //输出
int LocateElem(SqList L,int e,bool (*compare)(int,int)); //查找
bool GetElem(SqList L,int i, int *e);//取值
bool equal(int c1,int c2);
int main()
{
SqList L;
int i, v, num;
int e,e0;
InitList(&L);
printf("L.length = %d L.listsize = %d\n",L.length,L.listsize);
printf("请输入L元素的个数:");
scanf("%d",&num);
for(i = 1; i <= num; i++) //在表中插入4个元素
{
printf("请输入L中第%d个元素的值为",i);
scanf("%d",&v);
ListInsert(&L,i,v);
}
printf("L = "); //输出表L的元素
ListTraverse(&L);
printf("在第二个位置插入\n");
scanf("%d",&v);
ListInsert(&L,2,v);
printf("输出L中的元素");
ListTraverse(&L);
printf("删除第三个位置的元素\n");
ListDelete(&L,3,&e); //删除
ListTraverse(&L);
GetElem(L,1,&e0);
printf("输出第一个元素的值:%d\n",e0);
return 0;
}
bool InitList(SqList *L)
{
L->elem = (int *)malloc(Init_size*sizeof(int));
if(L->elem == NULL)
{
printf("内存分配失败,程序终止\n");
exit(-1);
}
L->length = 0; //空表长度
L->listsize = Init_size; //初始存储容量
return true;
}
bool ListInsert(SqList *L, int i, int e)
{
//在L中第i个位置之前插入新的数据元素e
int *newbase, *p, *q;
if( i < 1 || i > L->length+1 ) //i值不和法
return false;
if(L->length >= L->listsize) //当前存储空已满,增加分配
{
newbase = (int *)realloc(L->elem,(L->listsize+Increment)*sizeof(int));
if(newbase == NULL)
{
printf("内存分配失败,程序终止\n");
exit(-1);
}
L->elem = newbase;
L->listsize += Increment; //增加的存储容量
}
q = L->elem + i - 1;
for(p = L->elem+L->length-1; p >= q; --p) //插入位置及之后的元素后移
*(p+1) = *p;
*q = e;
L->length++;
return true;
}
bool ListDelete(SqList *L, int i, int *e)
{
//删除L的第i个数据元素,并用e值返回
int *p, *q;
if(i < 1 || i > L->length) // i值不合法
return false;
p = L->elem + i - 1; //p为被删除元素的位置
*e = *p; //被删除的元素赋值给e
q = L->elem+L->length-1; //表尾的位置
for(p++; p <= q; p++)
*(p-1) = *p;
L->length--;
return true;
}
bool ListTraverse(SqList *L) //输出线性表中的元素
{
int *p;
int i;
p = L->elem;
for(i = 1; i <= L->length; i++)
{
printf("%d ",*p);
*p++;
}
printf("\n");
return true;
}
int LocateElem(SqList L,int e,bool (*compare)(int,int))
{//返回L中第一个与e满足关系compare()的数据元素的位序
int *p;
int i = 1; //i的初始值为第一个元素的位序
p = L.elem;
while(i <= L.length && !compare(*(p++),e))
i++;
if(i <= L.length)
return i;
else
return 0;
}
bool equal(int c1,int c2)
{
if(c1 == c2)
return true;
else
return false;
}
bool GetElem(SqList L,int i, int *e)
{
//用e返回L中第i个数据元素的值
if(i < 1 || i > L.length)
return false;
*e = *(L.elem+i-1);
return true;
}
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询