|
|
|
@ -360,3 +360,167 @@ return i;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Status InitList(LinkList& L)//链表初始化
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
L = (LinkList)malloc(sizeof(LNode));
|
|
|
|
|
|
|
|
|
|
if (!L)
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
exit(OVERFLOW);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
L->next = NULL;
|
|
|
|
|
|
|
|
|
|
return OK;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Status ListInsert_L(LinkList& L, int i, ElemType e)//在第i个位置之前插入元素e
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
LinkList p = L;
|
|
|
|
|
|
|
|
|
|
int j = 0;
|
|
|
|
|
|
|
|
|
|
while (p && j < i - 1)//注意是i-1,因为要找被插入元素的前一个元素
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
p = p->next;
|
|
|
|
|
|
|
|
|
|
j++;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!p || j > i - 1)
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
return ERROR;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LinkList s = (LinkList)malloc(sizeof(LNode));
|
|
|
|
|
|
|
|
|
|
if (!s)
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
exit(OVERFLOW);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
s->data = e;
|
|
|
|
|
|
|
|
|
|
s->next = p->next;
|
|
|
|
|
|
|
|
|
|
p->next = s;
|
|
|
|
|
|
|
|
|
|
return OK;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Status ListEmpty(LinkList L)//判断链表是否为空
|
|
|
|
|
|
|
|
|
|
//空表:头指针和头结点仍然存在,但头结点指向NULL
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (L->next)
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Status DelFirst(LinkList L, LNode*& q)//删除链表中第一个结点并以q返回
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (!L->next)
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
return ERROR;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
q = L->next;
|
|
|
|
|
|
|
|
|
|
L->next = q->next;
|
|
|
|
|
|
|
|
|
|
return OK;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LNode* GetHead(LinkList L)//返回链表头结点
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
return L;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ElemType GetCurElem(LNode* p)//已知p指向线性链表中的一个结点,返回p所指结点中元素的值
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
return p->data;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void PrintEventList()//打印事件链表
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
printf("Current Eventlist is:\n");
|
|
|
|
|
|
|
|
|
|
ListTraverse(ev);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Status ListTraverse(LinkList& L) //遍历链表
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
LNode* p = L->next;
|
|
|
|
|
|
|
|
|
|
if (!p) {
|
|
|
|
|
|
|
|
|
|
printf("List is empty.\n");
|
|
|
|
|
|
|
|
|
|
return ERROR;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
while (p != NULL) {
|
|
|
|
|
|
|
|
|
|
printf("OccurTime:%d,Event Type:%d\n", p->data.OccurTime, p->data.NType);
|
|
|
|
|
|
|
|
|
|
p = p->next;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("\n");
|
|
|
|
|
|
|
|
|
|
return OK;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|