求编程大神解一道数据结构题
2个回答
展开全部
#include<stdio.h>
#include<memory>
#define OVERFLOW -1
#define ERROR -2
#define OK 1
typedef int ElemType;//元素类型
typedef struct LNode
{
ElemType elem;
struct LNode *next;
}*LinkList;
int Length;
int InitList(LinkList &L)//操作数:
{
//新建一个线性表
L=(LinkList)malloc(sizeof(LNode));
if (!L) return OVERFLOW;
L->next=NULL;
Length=0;
return OK;
}
int DestroyList(LinkList &L)//操作数:
{
//销毁一个线性表
if (!L) return ERROR;
LinkList nowp=L,lastp;
do
{
lastp=nowp;
nowp=nowp->next;
free(lastp);
}while (nowp);
Length=0;
return OK;
}
int ClearList(LinkList &L)//操作数:
{
//清空线性表
if (Length==0) return ERROR;
DestroyList(L->next);
L->next=NULL;
return OK;
}
int ListEmpty()//操作数:
{
//查询线性表是否为空
if (Length==0) return OK;
else return ERROR;
}
int ListLength()//操作数:
{
//查询线性表的长度
return Length;
}
int GetElem(LinkList L,int i,int &e)//操作数:
{
//询问线性表指定位置的元素
if (i<1 || i>Length) return ERROR;
LinkList p;
for (p=L->next;p;p=p->next)
{
i--;
if (i==0)
{
e=p->elem;
return OK;
}
}
return ERROR;
}
int PriorElem(LinkList L,int cur_e,int &pre_e)//操作数:
{
//查询某个元素的前面第一个元素
LinkList p,q=L;
for (p=L->next;p;q=p,p=p->next)
{
if (p->elem==cur_e)
{
if (q==L) return ERROR;
else
{
pre_e=q->elem;
return OK;
}
}
}
return ERROR;
}
int NextElem(LinkList L,int cur_e,int &next_e)//操作数:
{
//查询某个元素后面的第一个元素
LinkList p;
for (p=L->next;p;p=p->next)
{
if (p->elem==cur_e)
{
if (p->next==NULL) return ERROR;
else
{
next_e=p->next->elem;
return OK;
}
}
}
return ERROR;
}
int ListInsert(LinkList &L,int i,int e)//操作数
{
//在指定位置插入元素
int j=i-1,k;
if (j<0 || j>Length) return ERROR;
LinkList p,q;
for (p=L,k=0;p;k++,p=p->next)
if (k==j)
{
q=(LinkList)malloc(sizeof(LNode));
q->elem=e;
q->next=p->next;
p->next=q;
Length++;
return OK;
}
return ERROR;
}
int ListDelete(LinkList &L,int i,int &e)//操作数:
{
//删除指定位置的元素
int j=i-1,k;
if (j<0 || j>Length) return ERROR;
LinkList p,q;
for (p=L,k=0;p;k++,p=p->next)
if (k==j)
{
q=p->next;
e=q->elem;
p->next=p->next->next;
free(q);
Length--;
return OK;
}
return ERROR;
}
int main()
{
LinkList L;
int order,ans,i,e,tmp;
while (scanf("%d",&order) && order!=-1)
{
switch(order)
{
//新建一个线性表
case 0: tmp=InitList(L);
if (tmp==OVERFLOW) printf("OVERFLOW\n");
else printf("InitList Well Done\n");
break;
//销毁一个线性表
case 1: tmp=DestroyList(L);
if (tmp==ERROR) printf("ERROR\n");
else printf("DestroyList Well Done\n");
break;
//清空线性表
case 2: tmp=ClearList(L);
if (tmp==OK) printf("ClearList Well Done\n");
else printf("ERROR\n");
break;
//查询线性表是否为空
case 3: tmp=ListEmpty();
if (tmp==OK) printf("ListEmpty -- OK\n");
else printf("ListEmpty -- ERROR\n");
break;
//查询线性表的长度
case 4: ans=ListLength();
if (ans==ERROR) printf("ERROR\n");
else printf("ListLength is %d\n",ans);
break;
//询问线性表指定位置的元素
case 5: scanf("%d",&i);
tmp=GetElem(L,i,ans);
if (tmp==ERROR) printf("ERROR\n");
else printf("The ith is %d\n",ans);
break;
//查询某个元素的前面第一个元素
case 6: scanf("%d",&i);
tmp=PriorElem(L,i,ans);
if (tmp==ERROR) printf("PriorElem ERROR\n");
else printf("The ith PriorElem is %d\n",ans);
break;
//查询某个元素后面的第一个元素
case 7: scanf("%d",&i);
tmp=NextElem(L,i,ans);
if (tmp==ERROR) printf("NextElem ERROR\n");
else printf("The ith NextElem is %d\n",ans);
break;
//在指定位置插入元素
case 8: scanf("%d%d",&i,&e);
tmp=ListInsert(L,i,e);
if (tmp==ERROR) printf("ListInsert ERROR\n");
else if (tmp==OVERFLOW) printf("OVERFLOW\n");
else printf("ListInsert Well Done\n");
break;
//删除指定位置的元素
case 9: scanf("%d",&i);
tmp=ListDelete(L,i,ans);
if (tmp==ERROR) printf("Delete ERROR\n");
printf("Delete ith ans the ith is %d\n",ans);
break;
}
}
return 0;
}
#include<memory>
#define OVERFLOW -1
#define ERROR -2
#define OK 1
typedef int ElemType;//元素类型
typedef struct LNode
{
ElemType elem;
struct LNode *next;
}*LinkList;
int Length;
int InitList(LinkList &L)//操作数:
{
//新建一个线性表
L=(LinkList)malloc(sizeof(LNode));
if (!L) return OVERFLOW;
L->next=NULL;
Length=0;
return OK;
}
int DestroyList(LinkList &L)//操作数:
{
//销毁一个线性表
if (!L) return ERROR;
LinkList nowp=L,lastp;
do
{
lastp=nowp;
nowp=nowp->next;
free(lastp);
}while (nowp);
Length=0;
return OK;
}
int ClearList(LinkList &L)//操作数:
{
//清空线性表
if (Length==0) return ERROR;
DestroyList(L->next);
L->next=NULL;
return OK;
}
int ListEmpty()//操作数:
{
//查询线性表是否为空
if (Length==0) return OK;
else return ERROR;
}
int ListLength()//操作数:
{
//查询线性表的长度
return Length;
}
int GetElem(LinkList L,int i,int &e)//操作数:
{
//询问线性表指定位置的元素
if (i<1 || i>Length) return ERROR;
LinkList p;
for (p=L->next;p;p=p->next)
{
i--;
if (i==0)
{
e=p->elem;
return OK;
}
}
return ERROR;
}
int PriorElem(LinkList L,int cur_e,int &pre_e)//操作数:
{
//查询某个元素的前面第一个元素
LinkList p,q=L;
for (p=L->next;p;q=p,p=p->next)
{
if (p->elem==cur_e)
{
if (q==L) return ERROR;
else
{
pre_e=q->elem;
return OK;
}
}
}
return ERROR;
}
int NextElem(LinkList L,int cur_e,int &next_e)//操作数:
{
//查询某个元素后面的第一个元素
LinkList p;
for (p=L->next;p;p=p->next)
{
if (p->elem==cur_e)
{
if (p->next==NULL) return ERROR;
else
{
next_e=p->next->elem;
return OK;
}
}
}
return ERROR;
}
int ListInsert(LinkList &L,int i,int e)//操作数
{
//在指定位置插入元素
int j=i-1,k;
if (j<0 || j>Length) return ERROR;
LinkList p,q;
for (p=L,k=0;p;k++,p=p->next)
if (k==j)
{
q=(LinkList)malloc(sizeof(LNode));
q->elem=e;
q->next=p->next;
p->next=q;
Length++;
return OK;
}
return ERROR;
}
int ListDelete(LinkList &L,int i,int &e)//操作数:
{
//删除指定位置的元素
int j=i-1,k;
if (j<0 || j>Length) return ERROR;
LinkList p,q;
for (p=L,k=0;p;k++,p=p->next)
if (k==j)
{
q=p->next;
e=q->elem;
p->next=p->next->next;
free(q);
Length--;
return OK;
}
return ERROR;
}
int main()
{
LinkList L;
int order,ans,i,e,tmp;
while (scanf("%d",&order) && order!=-1)
{
switch(order)
{
//新建一个线性表
case 0: tmp=InitList(L);
if (tmp==OVERFLOW) printf("OVERFLOW\n");
else printf("InitList Well Done\n");
break;
//销毁一个线性表
case 1: tmp=DestroyList(L);
if (tmp==ERROR) printf("ERROR\n");
else printf("DestroyList Well Done\n");
break;
//清空线性表
case 2: tmp=ClearList(L);
if (tmp==OK) printf("ClearList Well Done\n");
else printf("ERROR\n");
break;
//查询线性表是否为空
case 3: tmp=ListEmpty();
if (tmp==OK) printf("ListEmpty -- OK\n");
else printf("ListEmpty -- ERROR\n");
break;
//查询线性表的长度
case 4: ans=ListLength();
if (ans==ERROR) printf("ERROR\n");
else printf("ListLength is %d\n",ans);
break;
//询问线性表指定位置的元素
case 5: scanf("%d",&i);
tmp=GetElem(L,i,ans);
if (tmp==ERROR) printf("ERROR\n");
else printf("The ith is %d\n",ans);
break;
//查询某个元素的前面第一个元素
case 6: scanf("%d",&i);
tmp=PriorElem(L,i,ans);
if (tmp==ERROR) printf("PriorElem ERROR\n");
else printf("The ith PriorElem is %d\n",ans);
break;
//查询某个元素后面的第一个元素
case 7: scanf("%d",&i);
tmp=NextElem(L,i,ans);
if (tmp==ERROR) printf("NextElem ERROR\n");
else printf("The ith NextElem is %d\n",ans);
break;
//在指定位置插入元素
case 8: scanf("%d%d",&i,&e);
tmp=ListInsert(L,i,e);
if (tmp==ERROR) printf("ListInsert ERROR\n");
else if (tmp==OVERFLOW) printf("OVERFLOW\n");
else printf("ListInsert Well Done\n");
break;
//删除指定位置的元素
case 9: scanf("%d",&i);
tmp=ListDelete(L,i,ans);
if (tmp==ERROR) printf("Delete ERROR\n");
printf("Delete ith ans the ith is %d\n",ans);
break;
}
}
return 0;
}
追问
是两个么,第一个是顺序还是单链表?
Sievers分析仪
2024-10-13 广告
2024-10-13 广告
是的。传统上,对于符合要求的内毒素检测,最终用户必须从标准内毒素库存瓶中构建至少一式两份三点标准曲线;必须有重复的阴性控制;每个样品和PPC必须一式两份。有了Sievers Eclipse内毒素检测仪,这些步骤可以通过使用预嵌入的内毒素标准...
点击进入详情页
本回答由Sievers分析仪提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询