问题:在分配空间时,遇到问题
定义一个结构体:
typedef struct dLinkListNode
{
int data;
struct dLinkListNode *prior;
struct dLinkListNode *next;
}*dLinkList,dListNode;
dList=(dLinkList)malloc(sizeof(dListNode));与dList=(dLinkList)malloc(sizeof(dLinkList));是不一样的,即指针和结构体的大小不一样,不要想当然。
指针的问题真的小心,一不小心就出错。
代码:
#include <iostream>
#include <cstdlib>
using namespace std;typedef struct dLinkListNode
{int data;struct dLinkListNode *prior;struct dLinkListNode *next;
}*dLinkList,dListNode;void CreateDlinklist(dLinkList &dList) //尾插入法建立双链表
{dLinkList node;int elem;dList=(dLinkList)malloc(sizeof(dListNode));if(!dList){cout<<"allocate fail"<<endl;}else{dList->data=0;dList->next=NULL;dList->prior=NULL;}cin>>elem;while(elem!=EOF){node=(dLinkList)malloc(sizeof(dListNode));if(!node){cout<<"allocate fail"<<endl;exit(-1);}else{if(dList->next==NULL){node->data=elem;node->next=dList->next;dList->next=node;node->prior=dList;}else{node->data=elem;node->next=dList->next;dList->next->prior=node;dList->next=node;node->prior=dList;}cin>>elem;}}}
void insertDNode(dLinkList dList,int elem)
{dLinkList node,pre,tempNode;node=(dLinkList)malloc(sizeof(dListNode));if(node==NULL){cout<<"allocate fail"<<endl;exit(0);}else{node->data=elem;node->next=NULL;node->prior=NULL;}pre=dList;tempNode=dList->next;while(tempNode){if(tempNode->data<elem){pre=tempNode;tempNode=tempNode->next;if(tempNode==NULL){pre->next=node;node->prior=pre;node->next=NULL;}}else{node->next=pre->next;pre->next->prior=node;pre->next=node;node->prior=pre;break;}}}void deleteDNode(dLinkList dList,int elem)
{dLinkList node,pre;pre=dList;node=dList->next;while(node){if(node->data==elem){pre->next=node->next;node->next->prior=pre;break;}else{pre=node;node=node->next;if(node==NULL){cout<<"there is no the element"<<endl;}}}
}
void display(dLinkList dList)
{dLinkList node;node=dList->next;while(node){if(node->next==NULL){cout<<node->data;}else{cout<<node->data<<"->";}node=node->next;}cout<<endl;
}int main()
{dLinkList dList;cout<<"创建双链表:"<<endl;CreateDlinklist(dList);cout<<"输出双链表"<<endl;display(dList);deleteDNode(dList,3);cout<<"输出双链表"<<endl;display(dList);insertDNode(dList,9); //插入元素cout<<"输出双链表"<<endl;display(dList);return 0;
}
运行结果: