程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 雙鏈表的基本運算

雙鏈表的基本運算

編輯:C++入門知識

代碼:

#include
#include
typedef char ElemType;
typedef struct DNode
{
	ElemType data;
	struct DNode *prior;
	struct DNode *next;
}DLinkList;
//初始化
void InitList(DLinkList * &L)
{
	L=(DLinkList *)malloc(sizeof(DLinkList));
	L->prior=L->next=NULL;
}
//銷毀雙鏈表
void DestroyList(DLinkList *L)
{
	DLinkList *p=L,*q=p->next;
	while(q!=NULL)
	{
		free(p);
		p=q;
		q=p->next;
	}
	free(p);
}
//判斷鏈表是否為空
bool ListEmpty(DLinkList *L)
{
	return(L->next==NULL);
}
//雙鏈表的長度
int ListLength(DLinkList *L)
{
	DLinkList *p=L;
	int i=0;
	while(p->next!=NULL)
	{
		i++;
		p=p->next;
	}
	return i;
}
//輸出雙鏈表
void DispList(DLinkList *L)
{
	DLinkList *p=L->next;
	while(p!=NULL)
	{
		printf(" %c ",p->data);
		p=p->next;
	}
	printf("\n");
}
//求雙鏈表中的某個元素的值
bool GetElem(DLinkList *L,int i,ElemType &e)
{
	int j=0;
	DLinkList *p=L;
	while(jnext;
	}
	if(p==NULL)
		return false;
	else
	{
		e=p->data;
		return true;
	}
    
}
//按元素值查找
int LocateElem(DLinkList *L,ElemType e)
{
	int n=1;
	DLinkList *p=L->next;
	while(p!=NULL && p->data!=e)
	{
		n++;
		p=p->next;
	}
	if(p==NULL)
		return 0;
	else
		return n;
}
//插入元素
bool ListInsert(DLinkList * &L,int i,ElemType e)
{
	int j=0;
	DLinkList *p=L,*s;
	while(jnext;
	}
	if(p==NULL)
		return false;
	else
	{
		s=(DLinkList *)malloc(sizeof(DLinkList));
		s->data=e;
		s->next=p->next;
		if(p->next!=NULL)
			p->next->prior=s;
		s->prior=p;
		p->next=s;
		return true;
	}
}
//刪除數據元素
bool ListDelete(DLinkList * &L,int i,ElemType &e)
{
	int j=0;
	DLinkList *p=L,*q;
	while(jnext;
	}
	if(p==NULL)
		return false;
	else
	{
		q=p->next;
		if(q==NULL)
			return false;
		e=q->data;
		p->next=q->next;
		if(p->next!=NULL)
			p->next->prior=p;
		free(q);
		return true;
	}
}
void main()
{
	DLinkList *h;
	ElemType e;
	printf("雙鏈表的基本運算如下:\n");
	printf(" (1)初始化雙鏈表h\n");
	InitList(h);
	printf(" (2)依次采用尾插法插入a,b,c,d,e元素\n");
	ListInsert(h,1,'a');
	ListInsert(h,2,'b');
	ListInsert(h,3,'c');
	ListInsert(h,4,'d');
	ListInsert(h,5,'e');
	printf(" (3)輸出雙鏈表h:");
	DispList(h);
	printf(" (4)雙鏈表的長度=%d\n",ListLength(h));
	printf(" (5)雙鏈表h為%s\n",(ListLength(h)?"空":"非空"));
	GetElem(h,3,e);
	printf(" (6)雙鏈表h的第三個元素=%c\n",e);
	printf(" (7)元素a的位置=%d\n",LocateElem(h,'a'));
	printf(" (8)在第四個元素上插入f元素\n");
	ListInsert(h,4,'f');
	printf(" (9)輸出雙鏈表h:");
	DispList(h);
	printf(" (10)刪除h的第三個元素\n");
	ListDelete(h,3,e);
	printf(" (11)輸出雙鏈表h:");
	DispList(h);
	printf(" (12)釋放雙鏈表h\n");
	DestroyList(h);
}

運行結果:


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved