双向链表 排序算法 栈

#include "head.h"
int main(int argc, const char *argv[])
{
	Doublelist L=NULL;
	int n;
	datatype e;
	printf("please enter n:");
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		printf("please enter e:");
		scanf("%s",e);
	//	L=insert_head(e,L);//头插
    	L=insert_rear(e,L);//尾插
	}

	//循环输出
	output(L);
	
	//头删
//	L=delete_head(L);
//	L=delete_head(L);
//	output(L);

	//尾删
//	L=delete_rear(L);
//	L=delete_rear(L);
//	output(L);

   L=ni_zhi(L);
   output(L);
	return 0;
}
//逆置

Doublelist ni_zhi(Doublelist L)
{   //判断链表是否为空
	if(NULL == L)
	{
		return L;
	}
	//判断链表是否只有一个节点
	if(NULL == L->next)
	{
		return L;
	}

	//链表存在多个节点
	Doublelist p=L->next;
	L->next=NULL;
	while(p!=NULL)
	{
		Doublelist t=p;
		p=p->next;
		t->next=L;
		L->prev=t;
		t->prev=NULL;
		L=t;
	}
	return L;


}
#ifndef __HEAD_H__
#define __HEAD_H__

//双向循环链表
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef char datatype[20];//datatype-->char[20]


//定义双向链表节点的结构体
typedef struct Node
{
	//数据域:数据元素
	datatype data;
	//指针域:下一个节点的地址
	struct Node *next;
	//指针域:上一个节点的地址
	struct Node *prev;
}*Doublelist;

Doublelist cteate_node();                       //创建节点
Doublelist insert_head(datatype e,Doublelist L);//双向链表头插
void output(Doublelist L);                      //循环输出
Doublelist insert_rear(datatype e,Doublelist L);//双链表尾插
Doublelist delete_head(Doublelist L);           //双链表头删
Doublelist delete_rear(Doublelist L);         //双链表尾删  
Doublelist ni_zhi(Doublelist L);              //双链表逆置

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值