双向链表(C语言版)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int count=0;
p=l->next;
//printf("%d",p);
while(p)
{
p=p->next;
count++;
}
return count; //返回表长度
}
//后插法创建双向链表
void createlist(dullinklist l,int n)
{
dullinklist p,r;
printf("--插入成功--\n");
return;
}
//在非最后一位插入元素
q->next=p->next;
p->next->prior=q;
p->next=q;
q->prior=p;
printf("--插入成功--\n");
}
//删除
int dellist(dullinklist l,int i,int *e)
//插入新结点
r=p;
//尾结点后移
}
printf("--创建双向链表成功--\n");
}
//插入
void insertlist(dullinklist l,int i,int e)
{
int j=0;
dullinklist p,q;
p=l;
while(p&&j<i-1)
{
p=p->next;
//找寻第i-1个结点
{
dullinklist l;
l=(dullinklist)malloc(sizeof(dulnode));
l->prior=0;
l->next=0;
printf("--初始化成功--\n");
return l;
}
//表长
int listlength(dullinklist l)
{
dullinklist p;
++j;
}
if(!p||j>i-1)
{
printf("插入失败\n");
return;
}
q=(dullinklist)malloc(sizeof(dulnode));
q->data=e;
//在最后一位插入元素
if(p->next==0)
{
q->next=0;
p->next=q;
q->prior=p;
{
p->next=q->next;
q->next->prior=p;
}else
p->next=0;
//删除元素位于最后一位
*e=q->data;
free(q);
printf("--删除成功--\n");
return *e;
}
//打印表中元素
void printlist(dullinklist l) {
}
===================================="); printf("\n删除位置:"); scanf("%d",&i); dellist(l,i,&e); printf("表长:%d\n",listlength(l)); printlist(l); //printf("e=%d\n",e); printf("被删除元素:%d\n",e); printf("======================================END=============== putchar('\n');
{
int j=0;
dullinklist p,q;
p=l;
//找寻第i-1个结点
while(p&&j<i-1)
{
p=p->nexHale Waihona Puke Baidu;
j++;
}
if(!p||j>i-1)
{
printf("删除失败\n");
return -1;
}
q=p->next;
//被删除结点
if(q->next)
//删除元素非最后一位
int i=0;
r=l;
//生成新结点
for(;i<n;i++)
{
p=(dullinklist)malloc(sizeof(dulnode)); //生成新结点
printf("输入元素:");
scanf("%d",&p->data);
//输入元素
p->next=0;r->next=p;p->prior=r;
dullinklist p; p=l->next; while(p) {
printf("%3d",p->data); p=p->next; } putchar('\n'); } void main() { int i,e,n; dullinklist l; printf("====================================初始化 ===================================="); putchar('\n'); l=initlist(); printf("表长:%d\n",listlength(l)); printf("=================================创建双向链表 ================================="); putchar('\n'); printf("元素个数:"); scanf("%d",&n); createlist(l,n); printf("表长:%d\n",listlength(l)); printf("======================================插入 ===================================="); printf("\n插入位置:"); scanf("%d",&i); printf("插入元素:"); scanf("%d",&e); insertlist(l,i,e); printf("表长:%d\n",listlength(l)); printlist(l); printf("======================================删除
#include<stdio.h>
//双向链表定义
typedef struct node{
int data;
//数据域
struct node *prior; //前驱
struct node *next;
//后继
}dulnode,*dullinklist;
//初始化
dullinklist initlist()