分享

双向链表操作代码

 紫殿 2014-11-26
#include <stdio.h>
#include <malloc.h>
#define ElemType int

typedef struct LNode{
    ElemType data;
	 struct LNode *next;
	 struct LNode *prior;
}LNode;

void  InitList(LNode *L)
{
	L=(LNode*)malloc(sizeof(LNode));
	if(!L)
		printf("创建失败!!\n");
	L->data=-1;
	L->next=NULL;
	L->prior=NULL;
}
void ListInsert(LNode *L,int i,ElemType e)
{
   int j;
   LNode *s=(LNode*)malloc(sizeof(LNode));
   LNode *p=(LNode*)malloc(sizeof(LNode));
   p=L;
   if (i<1||!L)
	   printf("插入位置出错\n");
  	   for (j=0;j<i;j++)
  	   {
		   p=p->next;
  	   }
	    s->data=e;
	   s->prior=p->prior;p->prior->next=s;
	   s->next=p;
	   p->prior=s;
}
void Create(LNode *L)
{
    int x;
	LNode *q=(LNode*)malloc(sizeof(LNode));
	q=L;
	printf("请输入要插入的元素:\n");
	scanf("%d",&x);
	while (x)
	{
		LNode *p=(LNode*)malloc(sizeof(LNode));
		p->data=x;
		p->next=NULL;
		p->prior=q;
		q->next=p;
		q=p;
		scanf("%d",&x);
	}
}
void ListDelete(LNode *L,int i)
{
	int j,e;
   LNode *p=(LNode*)malloc(sizeof(LNode));
   LNode *q=(LNode*)malloc(sizeof(LNode)) ;
   p=L->next;
   for (j=1;j<i;j++)
   {
       p=p->next;
   }
   q=p->next;
   e=q->data;
   p->prior->next=p->next;
   p->next->prior=p->prior;

}
void Print(LNode *L)
{
	LNode *p;
	p=L->next;
	while (p!=NULL)
	{
		printf("%d  ",p->data);
		p=p->next;
	}
	printf("\n");
}

int main(void)
{
	int i,e,di;
	LNode *L=(LNode*)malloc(sizeof(LNode));
	InitList(L);
	printf("请创建一个链表:\n");
	Create(L);
	Print(L);
	printf("请输入插入位置及元素:\n");
	scanf("%d%d",&i,&e);
	ListInsert(L,i,e);
	printf("插入后的链表内容为:\n");
	Print(L);
	printf("请输入删除的位置:\n");
	scanf("%d",&di);
	ListDelete(L,di);
	printf("删除后的链表变为:\n");
	Print(L);
	free(L);
	return 0;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约