单链表上的基础操作之插入算法,请将函数int InsertElem( LinkList *head, int i, ElemType e),其中i为要插入元素的位序,插入位序的合法范围为1-6,e为要插入元素,函数返回值为操作成功(OK)与否(ERROR)
#include <stdio.h>
#include <stdlib.h>
#define ERROR 0
#define OK 1
#define N 5
typedef int ElemType;
typedef struct node {
ElemType data;
struct node *next;
} LinkList;
LinkList *InitList() {
LinkList *head;
head = ( LinkList *)malloc( sizeof(LinkList));
head->next = NULL;
return head;
}
LinkList *CreateList(int n) {
int i;
LinkList *head, *p, *r;
head = ( LinkList *)malloc(sizeof(LinkList));
r = head;
for ( i = 1; i <= n; i++) {
p = ( LinkList *)malloc( sizeof( LinkList));
scanf("%d", &( p->data));
r->next = p;
r = p;
}
r->next = NULL;
return head;
}
void PrintLinkList(LinkList *head) {
LinkList *p;
p = head->next;
while ( p != NULL) {
printf("%d,", p->data);
p = p->next;
}
}
int InsertElem( LinkList *head, int i, ElemType e) {
int j=0;
LinkList *p,*q;
p=head;
if(i<1||i>6){
return ERROR;
}
while(j<i-1&&p!=NULL){
p=p->next;
j++;
}
if(p==NULL){
return ERROR;
}
q= ( LinkList *)malloc( sizeof( LinkList));
q->next=p->next;
q->data=e;
p->next=q;
return OK;
}
int main() {
LinkList *head;
int i;
ElemType e;
head = CreateList(N);
scanf("%d %d", &i, &e);
if (!InsertElem( head, i, e))
printf("Failed!\n");
else
printf("Success!\n");
PrintLinkList(head);
}