//http://codeup.cn/showsource.php?id=1430493
#include<cstdlib>//malloc func
#include<cstdio>//stdio func
#include<cstring>//strcmp func
#define OK 1
#define ERROR 0
typedef int Status;//function type
typedef int ElemType;//LNode data type
typedef struct LNode{
ElemType data;//data element definition
struct LNode *next;//next node address definition
}LNode, *LinkList;//node type & list type definition
Status GetElem_L(LinkList &L,int i, ElemType &e){
//L is head node
LinkList p;
p=L->next;
int j=1;//p is the 1st node(next to L), j is a counter
while (p&&j<i){//find the node i(L is node 0)
p=p->next;
++j;
}
if (!p||j>i)//node i is not exist
return ERROR;
e=p->data;//e is data of node i
return OK;
}
Status ListInsert_L(LinkList &L, int i,ElemType e){
//insert new data before node i
LinkList p,s;//definition of new node(s),node i-1(p)
p=L;
int j=0;
while(p&&j<i-1){//find node i-1
p=p->next;
++j;
}
if(!p||j>i-1)//if i<1 or i>length of list, return ERROR
return ERROR;
s=(LinkList)malloc(sizeof(LNode));//insert new node as node i-1
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
Status ListDelete_L(LinkList &L,int i,ElemType &e){
//delete node i,and return the data by e(by address transmission)
LinkList p,q;
p=L;
int j=0;
while(p->next&&j<i-1){//find the node i-1
p=p->next;
++j;
}
if(!(p->next)||j>i-1)//delete isn't exist
return ERROR;
q=p->next;
p->next=q->next;//delete and free node
e=q->data;
free(q);
return OK;
}
void CreateList_L(LinkList &L,int n){
//input a list from rear to start
LinkList p;
int i;//the length of list
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;//head node allocate
for(i=n;i>0;--i){
p=(LinkList)malloc(sizeof(LNode));//new node between head node(L) and L->next
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
}
void ShowList_L(LinkList &L){
//show data of L
LinkList p=L->next;//p is a node to show L
if(p==NULL)
{
printf("Link list is empty\n");
return;
}
while(p!=NULL){
if(p->next==NULL)
printf("%d",p->data);
else printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main(){
int n=0,m=0,num=0;
ElemType e;
char str_Instruction[10];
LinkList List;
scanf("%d",&n);
CreateList_L(List,n);
scanf("%d",&m);
while(m--){
scanf("%s",str_Instruction);
if(!strcmp(str_Instruction,"get")){
scanf("%d",&num);
if(GetElem_L(List,num,e)){
printf("%d\n",e);
}
else{
printf("get fail\n");
}
}
else if(!strcmp(str_Instruction,"delete")){
scanf("%d",&num);
if(ListDelete_L(List,num,e)){
printf("delete OK\n");
}
else{
printf("delete fail\n");
}
}
else if(!strcmp(str_Instruction,"insert")){
scanf("%d %d",&num,&e);
if(ListInsert_L(List,num,e)){
printf("insert OK\n");
}
else{
printf("insert fail\n");
}
}
else if(!strcmp(str_Instruction,"show")){
ShowList_L(List);
}
}
return 0;
}
这道题做的过程一言难尽,mark,为了防止乱码注释用英文写的,很容易超时,请尽量使用c语言的语法
地址: