📄 双链表删除.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
//双链表的定义:
typedef char DataType;
typedef struct dlistnode //结点类型定义
{ DataType data;
struct dlistnode *prior,*next;
}DListNode;
typedef DListNode *DLinkList;
void main()
{
DLinkList head;
DListNode *p;
int i;
DLinkList DCreateList(void);
DLinkList DGetNode(DLinkList head,int i);
void DDeleteNode(DLinkList p);
void DPrintList(DLinkList head);
head=DCreateList(); //建立双链表
DPrintList(head); //打印双链表
printf("请输入欲删除元素的位置:");
scanf("%d",&i);
p=DGetNode(head,i); //寻找第i个结点
if(p==NULL)
{ printf("删除位置非法\n");
exit(0);
}
DDeleteNode(p);
DPrintList(head); //打印双链表
}
//双链表的建立:
DLinkList DCreateList(void)
{ char ch;
DLinkList head=(DListNode *)malloc(sizeof(DListNode));
DListNode *s,*r;
head->next=NULL;
head->prior=NULL;
r=head; //尾指针初值指向头结点
while ((ch=getchar())!='\n')
{ s=(DListNode *)malloc(sizeof(DListNode)); //生成新结点
s->data=ch;
r->next=s;
s->prior=r;
r=s;
}
r->next=head;
head->prior=r;
return head; //返回头指针
}
//双链表的打印:
void DPrintList(DLinkList head)
{
DListNode *p;
for(p=head->next;p!=head;p=p->next)
printf("%c",p->data);
printf("\n");
}
//双链表的查找
DLinkList DGetNode(DLinkList head,int i)
{//在带头结点的双链表head中查找第i个结点
int j;
DListNode *p;
p=head;j=0; //从头结点开始扫描
while (p->next!=head && j<i)
{ p=p->next;
j++;
}
if (i==j)
return p; //找到了第i个结点
else
return NULL; //找不到满足条件的结点
}
//双链表的删除
void DDeleteNode(DLinkList p)
{//删除带头结点双链表中的*p结点
p->prior->next=p->next;
p->next->prior=p->prior;
free(p);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -