码迷,mamicode.com
首页 > 其他好文 > 详细

线性结构之双链表实现

时间:2016-10-22 18:30:12      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:线性结构之双链表实现

#include<stdio.h>

#include<malloc.h>

#include<stdlib.h>

typedef struct node

{

int data;

struct node * prior;

struct node * next;

}NODE,*PNODE;

PNODE createList(PNODE);

void travelList(PNODE);

void insertList(PNODE,int,int);

int lengthList(PNODE);

void delList(PNODE,int,int *);

void main()

{

//头结点是需要造出来的,给他分配空间

PNODE phead=(PNODE)malloc(sizeof(NODE));

if(NULL==phead)

{

printf("内存分配失败");

exit(-1);

}

phead->next=NULL;

phead->prior=NULL;

//创建双链表

phead=createList(phead);

//遍历双链表

travelList(phead);

printf("\n");

//链表的插入

insertList(phead,2,3);

//遍历双链表

travelList(phead);

printf("\n");

printf("开始准备删除结点\n");

int val;

//链表结点删除

delList(phead,2,&val);

//遍历双链表

travelList(phead);

printf("\n");


}

PNODE createList(PNODE phead)

{

int len;

int val;

PNODE p=phead;

printf("请输入要初始化结点的个数:");

scanf("%d",&len);

for(int i=0;i<len;i++)

{

PNODE pnew=(PNODE)malloc(sizeof(NODE));

if(pnew==NULL)

{

printf("内存分配失败");

exit(-1);

}

printf("请输入给当前第%d个结点赋值",i+1);

scanf("%d",&val);

pnew->data=val;

pnew->prior=NULL;

pnew->next=NULL;


pnew->next=p->next;

pnew->prior=p;

p->next=pnew;

p=pnew;

}

return phead;

}

void delList(PNODE phead,int pos,int *val)

{

int i=0;

PNODE p=phead;

if(p==NULL||pos<1||pos>lengthList(phead))

{

printf("无法删除,删除不合法");

return;

}

while(i<pos-1)

{

p=p->next;

i++;

}

PNODE q=p->next;

*val=q->data;

printf("%d         ",*val);

p->next=p->next->next;

p->next->prior=p;

free(q);


}

void travelList(PNODE phead)

{

PNODE pnew=phead->next;

while(pnew!=NULL)

{

printf("%d ",pnew->data);

pnew=pnew->next;

}

}

void insertList(PNODE phead,int pos,int val)

{

PNODE p=phead;

int i=0;

if(p==NULL||pos<1||pos>lengthList(phead))

{

printf("无法插入结点,不合法");

exit(-1);

}

while(i<pos-1)

{

p=p->next;

i++;

}

//初始化结点

PNODE pnew=(PNODE)malloc(sizeof(NODE));

pnew->data=val;

pnew->next=NULL;

pnew->prior=NULL;

//准备插入结点

pnew->next=p->next;

p->next->prior=pnew;

pnew->prior=p;

p->next=pnew;

}

int lengthList(PNODE phead)

{

PNODE pnew=phead;

int i=0;

while(pnew!=NULL)

{

pnew=pnew->next;

i++;

}

return i;

}


本文出自 “简答生活” 博客,转载请与作者联系!

线性结构之双链表实现

标签:线性结构之双链表实现

原文地址:http://1464490021.blog.51cto.com/4467028/1864548

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!