C++ 双向链表(经过编译)

//doubleLinkList.h
# ifndef __DOUBLE_LINK_LIST_H__
# define __DOUBLE_LINK_LIST_H__

#include <iostream>
#include <string>
using namespace std;

typedef struct DataInfo
{
    string str;
}DATA_INFO, *LPDATA_INFO;

typedef struct linkNode
{
	DATA_INFO  data;
	struct linkNode* prev;
	struct linkNode* next;
}LINK_NODE, *LPLINK_NODE;

# endif//__DOUBLE_LINK_LIST_H__



// doubleLinkList.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "doubleLinkList.h"

LINK_NODE* testLink = NULL;
LINK_NODE* head     = NULL;

void InitLink(int n)
{
   head = new LINK_NODE();
   head->data.str = "";
   head->next = head;
   head->prev = head;

   LINK_NODE* s;
   LINK_NODE* p;
   p = head;

   char cinput[100] = {""};
   for (int i=0; i<n; i++)
   {
	  s = new LINK_NODE();

	  memset(cinput, 0, 100);
          cout<<"写入第"<<i+1<<":";
	  cin>>cinput;
	  cout<<" "<<cinput<<endl;
	  s->data.str = cinput;
	  
	  s->prev = p;
	  s->next = NULL;
	  p->next = s;

	  p = s;
   }

   p->next = head;
   head->prev = p;
}

void display(LINK_NODE* head)
{
   if(NULL == head)
   {
	  cout<< "head = NULL"<<endl;
	  return;
   }

   int i = 1;
   LINK_NODE* p = head->next;
   for (; p!=head; p=p->next,i++)
   {   
	  cout<<"第"<<i<<"项:"<<p->data.str.c_str()<<"   ";
   }
   cout<<endl;
}

void deleteNode(LINK_NODE** Node)
{
	LINK_NODE* pl = (*Node)->prev;
	LINK_NODE* pr = (*Node)->next;

	pr->prev = pl;
	pl->next = pr;

	delete (*Node);
	*Node = NULL;
}

void addNode(LINK_NODE* Node)//在Node后添加新节点
{
	LINK_NODE* p = Node->next;

	LINK_NODE* s = new LINK_NODE();
	s->data.str = "abcd";
	
	Node->next = s;
	s->prev = Node;
	p->prev = s;
	s->next = p;
}

void distroy(LINK_NODE** head)
{
        LINK_NODE* p = (*head)->next;
        LINK_NODE* temp = NULL;
        while(p!=(*head))
        {
	       temp = p->next;
               delete p;
	       p = temp;
        }
        delete *head;
        *head = NULL;
}

int _tmain(int argc, _TCHAR* argv[])
{
	InitLink(3);
	display(head);

	addNode(head);
	addNode(head);
	display(head);


	distroy(&head);
	display(head);
	return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值