本篇文章为你整理了AUSTOj4()的详细内容,包含有 AUSTOj4,希望能帮助你了解 AUSTOj4。
LinkList可以定义指向List的指针
1.当函数参数为LinkList L时,意味着只改变或操作List的内容,而不需要改变L这个指针
如
Status GetElem(LinkList L,int i,ElemType)
2.当参数为LinkList L时,意味着需要改变或操作L这个指针本身
如
Status InitList(LinkList L)
L=(LinkList)malloc(sizeof(struct LNode));
......
}
这里想初始化单链表,需要给L分配内存空间,即需要改变L
3.当参数为LinkList *L时,意味着需要改变或操作L这个指针指向的LinkList类型的指针
(此处的L可以理解为指向前两点中的L的指针)
此时给头结点分配储存空间时要这样写
(*L)=(LinkList)malloc(sizeof(struct LNode));
L前面要加*,表示L所指向的那个指针
#include stdio.h
#include stdlib.h
#include string.h
typedefintElemType;
typedefintStatus;
#defineERROR0
#defineOK1
typedefstructLNode{ //定义一个链表
ElemTypedata; //链表的数据
structLNode*next; //定义数据的后续空间
}LNode,*linkList;
StatusGetElem_L(linkList L,inti,ElemType e){ //获取位置i处的元素,并用e接住这个值
linkListp;
intj=1;
p=L- next;
while(p j i){
p=p- next;++j;
}
if(!pj i)
returnERROR;
e=p- data;
returnOK;
}
StatusListInsert_L(linkList L,inti,ElemTypee){ //在位置i处插入一个元素,并用e接住
LNode*p,*s;
intj=0;
p=L;
while(p j i-1) //可以理解为:while(p!=null p != 0 p!=false j i-1) 即p的范围是合理的
{
p=p- next; //p指向他的下一个
++j;
}
if(!pj i-1)
returnERROR;
s=(linkList)malloc(sizeof(LNode));//malloc函数用于在内存开辟了一段地址,而这段地址的首地址存在返回的那个指针变量里
s- data=e;
s- next=p- next;
p- next=s;
returnOK;
}
StatusListDelete_L(linkList L,inti,ElemType e){ //删除i处的元素,并用e接住
LNode*p,*q;
p=L;
intj=0;
while(p- next j i-1)
{
p=p- next;
++j;
}
if(!(p- next)j i-1)
returnERROR;
q=p- next;
p- next=q- next;
e=q- data;
free(q);
returnOK;
}
voidCreateList_L(linkList L,intn){ //创造一个新的链表
inti;
linkListp;
L=(linkList)malloc(sizeof(LNode));
L- next=NULL;
for(i=n;i --i)
{
p=(linkList)malloc(sizeof(LNode));
scanf("%d", (p- data));
p- next=L- next;
L- next=p;
}
}
intShowList_L(linkListL){
//显示链表中的元素,返回值为链表元素的数目
///===============补充代码========================
linkListp;
p=L- next; //定义头指针
inti=0;
while(p!=NULL){ //确认非空
printf("%d",p- data);
p=p- next;
i++;
}
returni;
}
intmain(){
intn;//初始时元素的数目
intm;//指令的数目
charstrInst[30];//存储指令:instruction
inta;//存储位置数据
linkListL;//链表
inte;//定义节点,用来存储获取的节点或者删除的节点
scanf("%d", //读入元素的数目
CreateList_L(L,n);//创建链表
scanf("%d", //读取指令的数目
while(m--){//做m次循环
scanf("%s",strInst);//读取指令
if(strcmp(strInst,"get")==0){//如果是需要获取某个元素
scanf("%d", //读取元素的位置
if(GetElem_L(L,a,e)==OK){//如果获取元素成功
printf("%d\n",e);//输出元素的值
}else{//如果获取元素失败
puts("getfail");//输出获取元素的出错信息
}
}elseif(strcmp(strInst,"insert")==0){//如果是插入某个元素
scanf("%d%d", a, //获取待插入的位置以及待插入的值
if(ListInsert_L(L,a,e)==OK){//如果插入元素成功
puts("insertOK");//输出插入成功的信息
}else{
puts("insertfail");//否则输出插入失败的信息
}
}elseif(strcmp(strInst,"delete")==0){//如果是删除某个元素
scanf("%d", //获得待删除元素的位置
if(ListDelete_L(L,a,e)==OK){//如果删除成功
puts("deleteOK");//输出删除成功的信息
}else{
puts("deletefail");//否则输出删除失败的信息
}
}elseif(strcmp(strInst,"show")==0){//如果是显示链表
if(ShowList_L(L)==0){//如果链表为空
puts("Linklistisempty");//显示量表为空的信息
}
}
}
return0;
}
以上就是AUSTOj4()的详细内容,想要了解更多 AUSTOj4的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。