双链表
问题:在分配空间时,遇到问题
定义一个结构体:
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; }
运行结果: