线性表的操作 (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://www.mcbbbk.com/newsview808610.html
| 上一篇: 记一次selenium + Ch... | 下一篇: 大学生养宠物成风 暨大发出“校园... |





