问:数据结构 顺序表的五种算法写成能执行的c语言程序

问:数据结构顺序表的五种算法写成能执行的c语言程序5种算法:初始化,取值,查找,插入,删除要求:有主函数调用... 问:数据结构 顺序表的五种算法写成能执行的c语言程序

5种算法:初始化,取值,查找,插入,删除
要求:有主函数调用
展开
 我来答
zmg061515
2016-09-25 · TA获得超过497个赞
知道答主
回答量:57
采纳率:0%
帮助的人:11.5万
展开全部
#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 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式