1、数据的节点定义如下面的tagData所列,该数据节点有两个索引值,分别是index1和index2,请编写程序,有如下要求:
1)据上下文,由于需要分别以index1和index2索引查找,请建立两个单向链表,分别以index1和index2,索引值唯一,且均为从小到大
2)提供增加节点的函数和删除节点的操作,请注意增加和删除节点的操作均会影响这两个链表。
3)删除操作数据是依据index2删除的
/*节点数据*/
{
intindex1;
intindex2;
intiData;
structtagData *pstNext1;
structtagData *pstNext2;
}NODE_S;
/*Description:链表初始化*/
voidinit();
/*Description:加入节点*/
voidadd(int index1,int index2,int iData);
/*Description:删除节点*/
Voiddelete(int index2);
//LinkList.cpp :定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include<stdlib.h>
//usingnamespace std;
typedefstructtagData
{
intindex1;
intindex2;
intiData;
structtagData *pstNext1;
structtagData *pstNext2;
}NODE_S;
NODE_S*pFirst = (NODE_S*)malloc(sizeof(NODE_S));
voidinit()
{
pFirst->index1= 0;
pFirst->index2= 0;
pFirst->iData= 0;
pFirst->pstNext1= NULL;
pFirst->pstNext2= NULL;
}
voidadd(intindex1,intindex2,intiData)
{
NODE_S*p = pFirst;
NODE_S*pNewNode = (NODE_S*)malloc(sizeof(NODE_S));
pNewNode->index1= index1;
pNewNode->index2= index2;
pNewNode->iData= iData;
pNewNode->pstNext1= NULL;
pNewNode->pstNext2= NULL;
while(p&& p->index1<index1-1)
{
p= p->pstNext1;
}
if(p)
{
pNewNode->pstNext1= p->pstNext1;//首先改变的是新加入节点的下一个指向的指针;
p->pstNext1= pNewNode;
p = pNewNode->pstNext1;
while(p)
{
p->index1++;
p= p->pstNext1;
}
}
p= pFirst;
while(p&& p->index1<index2-1)
{
p= p->pstNext2;
}
if(p)
{
pNewNode->pstNext2= p->pstNext2;
p->pstNext2= pNewNode;
p= pNewNode->pstNext2;
while(p)
{
p->index2++;
p= p->pstNext2;
}
}
}
voidDelete(intindex2)
{
NODE_S*pPre = pFirst;
NODE_S*p = pFirst->pstNext2;
while(p)
{
if(p->index2== index2)
{
break;
}
pPre= p;
p= p->pstNext2;
}
if(p)
{
pPre->pstNext2= p->pstNext2;
pPre= pPre->pstNext2;
//p= pPre;
while(pPre)
{
pPre->index2--;
pPre= pPre->pstNext2;
}
}
intindex1 = p->index1;
pPre= pFirst;
p= pPre->pstNext1;
while(p)
{
if(p->index1== index1)
{
break;
}
pPre= p;
p= p->pstNext1;
}
pPre->pstNext1= p->pstNext1;
pPre= pPre->pstNext1;
while(pPre)
{
pPre->index1--;
pPre= pPre->pstNext1;
}
free(p);
}
int_tmain(intargc, _TCHAR* argv[])
{
init();
add(0,0,4);
add(0,0,5);
add(0,0,6);
add(0,0,7);
add(0,3,8);
add(0,0,9);
add(0,0,10);
add(0,0,11);
add(0,0,4);
add(3,0,5);
add(0,0,6);
add(2,5,7);
add(0,3,8);
add(0,0,9);
add(3,8,10);
add(0,7,11);
Delete(3);
NODE_S*p = pFirst;
while(p)
{
printf("\n%d%d ",p->index1,p->iData);
p= p->pstNext1;
}
printf("\n");
p= pFirst;
while(p)
{
printf("\n%d%d ",p->index2,p->iData);
p= p->pstNext2;
}
return0;
}