求编程大神解一道数据结构题

 我来答
炉里的小方方
2015-10-29 · 知行合一,心外无物,说到做到
炉里的小方方
采纳数:17 获赞数:20

向TA提问 私信TA
展开全部
#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;
}
追问
是两个么,第一个是顺序还是单链表?
Sievers分析仪
2024-10-13 广告
是的。传统上,对于符合要求的内毒素检测,最终用户必须从标准内毒素库存瓶中构建至少一式两份三点标准曲线;必须有重复的阴性控制;每个样品和PPC必须一式两份。有了Sievers Eclipse内毒素检测仪,这些步骤可以通过使用预嵌入的内毒素标准... 点击进入详情页
本回答由Sievers分析仪提供
百度网友f5837fd
2015-10-29 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:217
采纳率:0%
帮助的人:26.6万
展开全部
基本上没有
追问
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式