有一道比较难的C语言,有大神会吗?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef struct LNode
{
int data;
char name[100];
LNode *next;
}LNode,*LinkList;
void CreateList_L(LinkList &L, int n)
{
int i;
LinkList p;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
printf("逆序输入 n 个数据元素,学号和姓名,建立带头结点的单链表\n");
for (i = n; i > 0; --i)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&(p->data));
scanf("%s",p->name);
p->next = L->next;
L->next = p;
}
p=L->next;
}
int ListInsert_L(LinkList L, int i, int e,char *c)
{
int j;
LinkList p,s;
p = L; j = 0;
while (p && j < i-1)
{
p = p->next;
++j;
}
if (!p || j > i-1)
return ERROR;
s = (LinkList)malloc(sizeof(LNode));
if ( s == NULL)
return ERROR;
s->data = e;
strcpy(s->name,c);
s->next = p->next; p->next = s;
p=L->next;
return OK;
}
int ListDelete_L(LinkList L, int i )
{
LinkList p,q;
int j;
p = L;
j = 0;
while (p->next && j < i-1)
{
p = p->next;
++j;
}
if (!(p->next) || j > i-1)
return ERROR;
q = p->next; p->next = q->next;
free(q);
p=L->next;
return OK;
}
void travser(LinkList L)
{
printf("表为:\n");
LinkList p;
p=L->next;
while (p)
{
printf("%d %s\n",p->data,p->name);
p=p->next;
}
}
int main()
{
LinkList L;
int n,i;
int e;
printf("输入链表中元素的个数:");
scanf("%d",&n);
CreateList_L(L, n);
travser(L);
printf("\n输入插入元素的位置和插入元素的值学号和姓名:");
char ns[100];
scanf("%d%d%s",&i,&e,ns);
ListInsert_L(L, i,e,ns);
travser(L);
printf("\n输入删除元素的位置:");
scanf("%d",&i);
ListDelete_L(L, i);
travser(L);
}