首页 > 分享 > 线性表的操作 (1)实现 A= A U B

线性表的操作 (1)实现 A= A U B

最新推荐文章于 2022-10-05 10:49:50 发布

qq_26883101 于 2016-05-13 23:24:53 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

#define LIST_INIT_SIZE 10

#define LISTINCREMENT 2

typedef struct SqList

{

int *elem;

int length;

int listsize;

}SqList;

bool InitList(SqList *L);

bool ListInsert(SqList *L,int pos,int e);

bool ListTraverse(SqList *L);

bool GetElem(SqList L,int pos,int *e);

bool equal(int c1,int c2);

int LocateElem(SqList L,int e,bool (*compare)(int,int));

int ListLength(SqList L);

void Union(SqList *La,SqList Lb);

int main()

{

SqList La, Lb;

int j;

int va, vb;

int num1, num2;

InitList(&La);

printf("请输入La元素的个数:");

scanf("%d",&num1);

for(j = 1; j <= num1; j++)

{

printf("请输入La中第%d个元素的值为",j);

scanf("%d",&va);

ListInsert(&La,j,va);

}

printf("La = ");

ListTraverse(&La);

InitList(&Lb);

printf("请输入Lb中元素的个数:");

scanf("%d",&num2);

for(j = 1; j <= num2; j++)

{

printf("请输入Lb中第%d个元素的值为",j);

scanf("%d",&vb);

ListInsert(&Lb,j,vb);

}

printf("Lb = ");

ListTraverse(&Lb);

Union(&La,Lb);

printf("new La = ");

ListTraverse(&La);

return 0;

}

bool InitList(SqList *L)

{

L->elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int));

if( L->elem == NULL)

{

printf("内存分配失败 程序终止!n");

exit(-1);

}

L->length = 0;

L->listsize = LIST_INIT_SIZE;

return true;

}

bool ListInsert(SqList *L,int pos,int e)

{

int * newbase, *q, *p;

if(pos < 1 || pos > L->length+1 )

return false;

if(L->length >= L->listsize)

{

newbase = (int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));

if(newbase == NULL)

{

printf("内存分配失败程序终止!n");

exit(-1);

}

L->elem = newbase;

L->listsize += LISTINCREMENT;

}

q = L->elem + pos - 1;

for(p = L->elem + L->length - 1; p >= q; --p)

*(p+1) = *p;

*q = e;

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;

}

void Union(SqList *La,SqList Lb)

{

int e;

int La_len, Lb_len;

int i;

La_len = ListLength(*La);

Lb_len = ListLength(Lb);

for(i = 1; i <= Lb_len; i++)

{

GetElem(Lb,i,&e);

if( !LocateElem(*La,e,equal) )

ListInsert(La,++La_len,e);

}

}

int ListLength(SqList L)

{

return L.length;

}

bool GetElem(SqList L,int pos,int *e)

{

if(pos < 1 || pos > L.length)

return false;

*e = *(L.elem + pos - 1);

return true;

}

bool equal(int c1,int c2)

{

if(c1 == c2)

return true;

else

return false;

}

int LocateElem(SqList L,int e,bool (*compare)(int,int))

{

int *p;

int i = 1;

p = L.elem;

while(i <= L.length && !compare(*(p++),e))

i++;

if(i <= L.length)

return i;

else

return 0;

}

程序执行结果:


相关知识

线性表的操作 (1)实现 A= A U B
设有一个线性表E = { e1, e2, … , en
浏览器前进与后退的秘密——栈 (栈的理解与实现)
a=b++,c++和a=(b++,c++)的区别
电路如图所示,二极管为同一型号的理想元件, u A =4sinωt V, u B
1/24=1/a+1/b,a和b的和最小是多少?
Cách nuôi leopard gecko: Hướng dẫn chi tiết cho người mới bắt đầu
如图示电路中, A 、 B 端电压 U = ( )
Vim的撤销(undo)(回退)(后退)重做(redo)(前进) , u回退 , Ctrl+r重做
基于STM32F407ZGT6实现微生态花园控制系统设计

网址: 线性表的操作 (1)实现 A= A U B https://m.mcbbbk.com/newsview808610.html

所属分类:萌宠日常
上一篇: 记一次selenium + Ch
下一篇: 大学生养宠物成风 暨大发出“校园