栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【学习】02 线性表-双链表

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【学习】02 线性表-双链表

  • 头文件 main.h
//#include "define.h"
#include 
#include 

#ifndef _ALLDEFINE_
#define _ALLDEFINE_

#define SQLMAXSIZE 100 
#define List_Size  100
#define TRUE  1
#define FALSE 0
#define OK    1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW   -2

typedef int Status;
typedef char ElemType;
typedef int SqlElemType; 

typedef struct DuLinkNode{ 
	struct DuLinkNode *prior;
	SqlElemType data;
	struct DuLinkNode *next;
} DuLinkNode,*DuLinkList;

Status InitDL(DuLinkList *L);
Status CreatDL_L(DuLinkList L,SqlElemType length);
Status CreatDL_H(DuLinkList L,SqlElemType length);
Status PrintDL(DuLinkList L);
Status DL_Insert(DuLinkList L,SqlElemType position,SqlElemType e);
Status DL_Delete(DuLinkList L,SqlElemType position,SqlElemType *e);

#endif
  • 初始化双链表 InitDL
#include "main.h"
Status InitDL(DuLinkList *L){
	*L = (DuLinkList)malloc(sizeof(DuLinkNode));
	(*L)->prior = NULL;
	(*L)->next = NULL;
	return 0;			
} 
  • 创建双链表-尾插 CreatDL_L
#include "main.h"
Status CreatDL_L(DuLinkList L,SqlElemType length){
	DuLinkList p =L;
	DuLinkList s;
	int i;
	if(p->next)
	 p=p->next;	
	for(i = 0;i < length;i++){
	s = (DuLinkList)malloc(sizeof(DuLinkNode));
	s->prior = NULL;
	s->next = NULL;	
	int e;
	scanf("%d",&e);
	s->data = e;
	p->next = s;	
	s->prior = p;
	p = s;
	}
	return OK;
}
	
  • 创建双链表-尾插 CreatDL_H
#include "main.h"
Status CreatDL_H(DuLinkList L,SqlElemType length){
	DuLinkList p =L;
	DuLinkList s;
	int i;
	for(i = 0;i < length;i++){
	s = (DuLinkList)malloc(sizeof(DuLinkNode));
	s->prior = NULL;
	s->next = NULL;	
	int e;
	scanf("%d",&e);
	s->data = e;
	s->next = p->next;
	s->prior = p;
	p->next =s;	
	}
	return OK;
}
  • 打印双链表 PrintDL
#include "main.h"
Status PrintDL(DuLinkList L){
	int length,i;
	length = 4;
	//int a[length];
	DuLinkList p = L;
	printf("当前保存的数据为:");
	for(i = 0;i
		//a[i] = p->data;
		p = p->next;
	printf("%d->",p->data);		
	}
	printf("n");	
	return OK;
}

  • 双链表根据位置插入数据
#include "main.h"
Status DL_Insert(DuLinkList L,SqlElemType position,SqlElemType e){
	DuLinkList p =L;
	DuLinkList s;
	int i = 1;
	while(p->next &&i
		p = p->next;
		i++;	
	}	
	s = (DuLinkList)malloc(sizeof(DuLinkNode));
	s->prior = NULL;
	s->next = NULL;	
	s->data = e;
	s->next = p->next;
	s->prior = p;
	p->next =s;	
	p->next->prior = s; 
	return OK;
}
  • 双链表根据位置删除数据
#include "main.h"
Status DL_Delete(DuLinkList L,SqlElemType position,SqlElemType *e){
	DuLinkList p =L;
	int i = 1;
	while(p->next && i
		p = p->next;
		i++;
	}
	if(!(p->next))
		return ERROR;		
	DuLinkList pfree = p->next;	
	*e = p->next->data;	
	p->next =p->next->next;
	p->next->next->prior = p;
	free(pfree);
	pfree = NULL;
	return OK;
}
	
}
	
}
	
  • 主函数
#include 
#include 
#include "main.h" 



int main(){
	DuLinkList L = NULL;
	InitDL(&L);
	//CreatDL_L(L,3);
	CreatDL_H(L,3);
	//DL_Insert(L,2,5);
	int e;
	DL_Delete(L,1,&e);
	printf("%dn",e);
	PrintDL(L);	
	return 0;
}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1032716.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号