#pragma warning(disable:4996)
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode {
int data;
struct LNode* next;
}LNode, * LinkList;
int InitList(LinkList* L)
{
*L = (LinkList)malloc(sizeof(LNode));
(*L)->next = NULL;
return 1;
}
int DestroyList(LinkList L)
{
free(L);
return 1;
}
int ClearList(LinkList L)
{
L->next = NULL;
return 1;
}
int ListEmpty(LinkList L)
{
if (L->next = NULL)
return 1;
return 0;
}
int ListLength(LinkList L)
{
int i = 1;
LinkList q=L->next;
while (q->next!= NULL)
{
q = q->next;
i++;
}
return i;
}
int CreatList(LinkList L)
{
LinkList p, q = L;
int n;
int i;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
p = (LinkList)malloc(sizeof(LNode));
scanf("%d", &p->data);
p->next = q->next;
q->next = p;
q = p;
}
return 1;
}
int GetElem(LinkList L, int i, int* e)
{
LinkList p = L->next;
int j = 1;
while (j < i && p != NULL)
{
p = p->next;
j++;
}
if (!p)return 0;
*e = p->data;
return 1;
}
int LocateElem(LinkList L, int e)//返回与e相等的元素的位序,若没有返回0
{
LinkList p = L->next;
int i = 1;
while (p != NULL && p->data != e)
{
p = p->next;
i++;
}
if (!p) return 0;
return i;
}
int PriorElem(LinkList L, int cur_e, int* pre_e)
{
LinkList q = L->next;
LinkList p = q;
while (q != NULL && q->data != cur_e)
{
p = q;
q = q->next;
}
if (!q) return 0;
*pre_e = p->data;
return 1;
}
int NextElem(LinkList L, int cur_e, int* next_e)
{
LinkList q = L->next;
while (q != NULL && q->data != cur_e)
q = q->next;
if (!q) return 0;
q = q->next;
*next_e = q->data;
return 1;
}
int ListInsert(LinkList L, int i, int e)
{
LinkList p, q = L->next;
int j = 1;
while (q != NULL && j < i - 1)
{
q = q->next;
j++;
}
if (!q) return 0;
p = (LinkList)malloc(sizeof(LNode));
p->data = e;
p->next = q->next;
q->next = p;
return 1;
}
int ListDelete(LinkList L, int i, int* e)
{
LinkList p = L->next;
LinkList q = p;
int j = 1;
while (p->next != NULL && j < i)
{
q = p;
p = p->next;
j++;
}
*e = p->data;
q->next = p->next;
free(p);
return 1;
}
void ListTraverse(LinkList L)
{
LinkList p = L->next;
printf("{ ");
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("}");
}
int ListAppend(LinkList* L, int e)
{
int t = ListLength(L);
ListInsert(L, t, e);
return 1;
}
int SetUnion(LinkList* L1, LinkList L2)//并集
{
int t = ListLength(L2);
int i = 0, e;
for (i = 1; i <= t; i++)
{
GetElem(L2, i, &e);
if (!LocateElem(*L1, e))
ListAppend(L1, e);
}
return 1;
}
void SetIntersect(LinkList* L1, LinkList L2)//交集
{
int t = ListLength(L2);
int i = 1, e;
for (i = 1; i <= t; i++)
{
GetElem(*L1, i, &e);
if (!LocateElem(L2, e))
ListDelete(*L1, i, e);
}
}
void SetSubtract(LinkList* L1, LinkList L2)//差集
{
int t = ListLength(L2);
int i = 1, e;
for (i = 1; i <= t; i++)
{
GetElem(*L1, i, &e);
if (LocateElem(L2, e))
ListDelete(*L1, i, e);
}
}int main()
{
LinkList L1, L2;
InitList(&L1);
CreatList(L1);
InitList(&L2);
CreatList(L2);
SetUnion(&L1, L2);
ListTraverse(L1);
return 0;
}
读取访问权限冲突引起异常
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- CSDN专家-sinJack 2023-09-25 09:51关注
int ListLength(LinkList L)
int ListAppend(LinkList* L, int e) { int t = ListLength(L); ListInsert(L, t, e); return 1; }
存在很多类型不一致问题,参数是普通类型,传的是对应的指针类型。
解决 1无用
悬赏问题
- ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
- ¥15 Android studio AVD启动不了
- ¥15 陆空双模式无人机怎么做
- ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
- ¥15 C#中的编译平台的区别影响
- ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
- ¥15 电脑蓝屏logfilessrtsrttrail问题
- ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
- ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
- ¥15 Java+vue部署版本反编译