コード例 #1
0
ファイル: avl_ext1.cpp プロジェクト: cravindra/OpenGL
void CBinaryTree::AddNode(int N)
{
 CNode *pNode,*pParent=NULL,*pNewNode;

 pNode=LocateNode(N,pRoot);
 pParent=LocateParent(N,pRoot);
 if(pParent==NULL)
  pRoot=new CNode(N);
 else
 {
  if(pNode==NULL)
  {
   pNewNode=new CNode(N,pParent);
   if(pParent->GetData()>N)
    pParent->pLeft=pNewNode;
   else
    pParent->pRight=pNewNode;
   }
  }
 while(pParent!=NULL)
 {
  int iBF=GetBalancingFactor(pParent->pRight)-GetBalancingFactor(pParent->pLeft);
  if(iBF<-1 || iBF>1)
  {
   if(iBF>0)
    RotateLeft(pNewNode);
   else
    RotateRight(pNewNode);
   if(pNewNode->pParent==NULL) pRoot=pNewNode;
  }
  pParent=pParent->pParent;
  pNewNode=pNewNode->pParent;
 }
}
コード例 #2
0
ファイル: linkedlist.c プロジェクト: homesangsang/datastruct
//用尾插入法建立带头节点的单链表
LinkList CreatListR1()
{
	char ch[10];
	LinkList head=(LinkList)malloc(sizeof(ListNode));
	ListNode *s,*r,*pp;
	r=head;
	r->next=NULL;
	printf("Input # to end \n");
	printf("Please input Node_data:");
	scanf("%s",ch);
	while(strcmp(ch,"#"))
	{
		pp=LocateNode(head,ch);
		if(pp==NULL)
		{
			s=(ListNode *)malloc(sizeof(ListNode));
			strcpy(s->data,ch);
			r->next=s;
			r=s;
			r->next=NULL;
		}
		printf("Input # to end \n");
		printf("Please input Node_data:");
		scanf("%s",ch);
	}
	return head;
}
コード例 #3
0
ファイル: avl_ext1.cpp プロジェクト: cravindra/OpenGL
void CBinaryTree::DeleteNode(int N)
{
 CNode *pNode=pRoot,*pParent=NULL;

 pNode=LocateNode(N,pRoot);
 pParent=LocateParent(N,pRoot);

 if(pNode!=NULL)
 {
  if(pParent==NULL)
  {
   pRoot=pNode->pRight;
   pParent=FindInsertionPoint(pNode->pLeft->GetData(),pNode->pRight);
   pParent->pLeft=pNode->pLeft;
  }
  else
  {
   if(pParent->pLeft==pNode)
   {
    if(pNode->pRight==NULL && pNode->pLeft!=NULL)
     pParent->pLeft=pNode->pLeft;
    if(pNode->pRight!=NULL && pNode->pLeft==NULL)
     pParent->pLeft=pNode->pRight;
    if(pNode->pRight!=NULL && pNode->pLeft!=NULL)
    {
     pParent->pLeft=pNode->pRight;
     pParent=FindInsertionPoint(pNode->pLeft->GetData(),pNode->pRight);
     if(pParent->GetData()>N)
      pParent->pLeft=pNode->pLeft;
     else
      pParent->pRight=pNode->pLeft;
    }
   }
   else
   {
    if(pNode->pRight==NULL && pNode->pLeft!=NULL)
     pParent->pRight=pNode->pLeft;
    if(pNode->pRight!=NULL && pNode->pLeft==NULL)
     pParent->pRight=pNode->pRight;
    if(pNode->pRight!=NULL && pNode->pLeft!=NULL)
    {
     pParent->pLeft=pNode->pRight;
     pParent=FindInsertionPoint(pNode->pLeft->GetData(),pNode->pRight);
     if(pParent->GetData()<N)
      pParent->pLeft=pNode->pLeft;
     else
      pParent->pRight=pNode->pLeft;
    }
   }
  }
  delete pNode;
 }
 else
  cout<<endl<<"Node not found!";
}
コード例 #4
0
ファイル: avl_ext1.cpp プロジェクト: cravindra/OpenGL
int CBinaryTree::GetRightChild(int N)
{
 CNode *pNode=LocateNode(N,pRoot);

 if(pNode!=NULL)
  if(pNode->pRight!=NULL)
   return pNode->pRight->GetData();
  else
   cout<<endl<<"Node didn't have right child!";
 else
  cout<<endl<<"Node not found!";
 return 0;
}
コード例 #5
0
ファイル: linkedlist.c プロジェクト: homesangsang/datastruct
//删除带头节点的单链表中的制定节点
void DeleteList(LinkList head,char * key)
{
	ListNode *p,*r,*q=head;
	p=LocateNode(head,key);
	if(p==NULL)
	{
		printf("position error");
		exit(0);
	}
	while(q->next!=p)	q=q->next;//p为要删除的节点,q为p的前节点。该行代码的目的是使q指针移动到p
	r=q->next;
	q->next=r->next;
	free(r);
}
コード例 #6
0
ファイル: linkedlist.c プロジェクト: homesangsang/datastruct
//修改程序:增加节点
ListNode * AddNode(LinkList head)
{
	char ch[10];
	ListNode * s,* pp;
	printf("\nPlease input a New Node_data:");
	scanf("%s",ch);
	pp=LocateNode(head,ch);
	if(pp==NULL){
		s=(LinkList)malloc(sizeof(ListNode));
		strcpy(s->data,ch);
		s->next=head->next;
		head->next=s;
	}
	return head;
}
コード例 #7
0
ファイル: 2_5.cpp プロジェクト: halfopen/data_struct
int main()
{	DLinkList *L;
	int choice;
	InitList(L);
	int length;
	ElemType *a;
	length = readInput(a);
	CreateList(L , a ,length);
	DispList(L);
	while(1 == scanf("%d",&choice))
	{	LocateNode(L,choice);
		DispList(L);
	}
	
	return 0;
}