双向循环链表使用实例
#include using namespace std;
typedef struct DLNode{ //定义一个双向循环链表 char data; DLNode *next; DLNode *back; }DLNode,*DLnode;
int Creat(DLnode root) { root=(DLNode*)malloc(sizeof(DLNode)); if(root==NULL) return 0; root->next=root->back=NULL; return 1; }
int Insert(DLnode &root,char x) { DLNode *p; DLnode s; s=root; p=(DLNode*)malloc(sizeof(DLNode)); if(p==NULL) { coutdata=x; p->back=s->back; p->next=s; s->back->next=p; s->back=p; free(p); free(s); return 1; }
int Delete(DLnode &root) { DLNode *p,*q; DLnode s; p=(DLNode*)malloc(sizeof(DLNode));
//创建一个带头节点的双向链表 //为头节点申请空间 //创建不成功返回0 //使next和back指针都指向root //创建成功返回1 //插入元素 //插入不成功,返回0 //插入成功返回1 //删除
q=(DLNode*)malloc(sizeof(DLNode)); s=root;
if(root==NULL) //头指针为空,则删除不成功 {
cout
p=s->next;
while(p!=s) //头指针不为空,删除#号前面的字符 { if(p->data!='#') p=p->next; else { q=p->back; q->back->next=q->next; q->next->back=q->back; } }
free(p); free(q);
cout
void PutOut(DLnode &root) { DLNode *p; if(root==NULL) { coutnext; while(p!=root) { coutdata; } cout
void main() {
DLnode root=NULL; Creat(root);
//打印双向链表元素 //测试程序
char x;
cout>x; Insert(root,x); }
Delete(root);
cout
DLnode roote=NULL; Creat(roote);
cout>x; Insert(roote,x); }
Delete(roote);
cout
}
进地址sp686.com 房间447 密码851