C语言数据结构之双向循环链表的实例

发布时间 - 2026-01-11 02:04:10    点击率:

数据结构之双向循环链表

实例代码:

#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
typedef struct Node{
 
 struct Node *pNext;
 int data;
 struct Node *prior;
} NODE,*PNODE;
PNODE CreatList();
void TreNode(PNODE pHead);
bool isEmpty(PNODE pHead);
int getCount(PNODE pHead);
bool insertNode (PNODE pHead,int pos,int val);
bool detNode (PNODE pHead,int pos,int *pVal);
void sort(PNODE pHead);

int main(){
 int val;
 PNODE pHead = NULL;
 pHead = CreatList();
 TreNode(pHead);
 printf("链表不为空!\n");
 printf("链表不为空!\n");

 if(insertNode(pHead, 4, 7))
 printf("插入成功!插入的元素为:%d\n", 7);
 else
 printf("插入失败!\n");
 //重新遍历链表
 TreNode(pHead);
 //删除元素测试
 if(detNode(pHead, 3, &val))
 printf("元素删除成功!删除的元素是:%d\n", val);
 else
 printf("元素删除失败!\n");
 TreNode(pHead);


 
 
 return 0 ;
}

PNODE CreatList(){
 
 int i ;
 int val;
 int length;
 
 PNODE pHead = (PNODE)malloc(sizeof(NODE));
 if(NULL==pHead)
 {
 printf("创建链表失败!\n");
 exit(-1); 
 }
 pHead->pNext = NULL;
 pHead->prior = NULL;
 
 PNODE pTail = pHead;

 
 printf("请输入您想要创建链表结点的个数:len = ");
  scanf("%d", &length);

 for(i = 0;i < length;i++){
     printf("请输入第%d个结点的值:", i+1);
       scanf("%d", &val);
    PNODE pnew = (PNODE)malloc(sizeof(NODE));
 if(NULL==pHead)
 {
 printf("创建链表失败!\n");
 exit(-1); 
 }
 pnew->data = val;
 // pTail->pNext = pnew;
   pTail->pNext = pnew;
   pnew->prior = pTail;
   pnew->pNext = pHead;
    pHead->prior = pnew;
  
 pTail = pnew;
 }

 return pHead; 
}

void TreNode(PNODE pHead){
 
 PNODE p = pHead->pNext;
 
 while(p!= pHead ){
 printf("%d",p->data);
 p = p->pNext;
 }
 
 printf("\n");
 return ;
 
}

bool isEmpty(PNODE pHead){
 
 if(NULL==pHead->pNext)
 return true;
 else
 return false;
}
int getCount(PNODE pHead)
{  
   int i =0 ; 
 PNODE p = pHead->pNext;
 while(NULL != p){
  p = p->pNext;
  i++;
 }
 return i ;
}

bool insertNode (PNODE pHead,int pos,int val){
 
 int i = 0;
// PNODE p = pHead;
PNODE p =pHead; 
 while(NULL !=p && i<pos-1){
 p = p->pNext;
 i++;
 
 }
 if(NULL == p || i>pos-1)
 {
 return false;
 }
   scanf("%d", &val);
  PNODE pNew = (PNODE)malloc(sizeof(NODE));
 if(NULL==pNew)
 {
 printf("创建链表失败!\n");
 exit(-1); 
 }
   pNew ->data = val;
   PNODE q = p->pNext;
 
    p->pNext = pNew;
    pNew->prior = p;
   pNew->pNext = q; 
    
 return true;
}
bool detNode (PNODE pHead,int pos,int *pVal){
 
 int i = 0;
// PNODE p = pHead;
PNODE p = pHead;
 
 while(NULL !=p && i<pos-1){
 p = p->pNext;
 i++;
 
 }
 if(NULL == p || i>pos-1)
 {
 return false;
 }
   
  
     *pVal = p->pNext->data;
 
    PNODE q = p->pNext;
    p->pNext = p->pNext->pNext;
    free(q);
    q = NULL;
    
 return true;
}
void sort(PNODE pHead){
 
 int i,j,k,t;
 k = getCount(pHead);
 PNODE p,q;
 for(i = 0,p=pHead->pNext;i < k-1;i++,p = p->pNext)
 {
  for(j = i+1,q = p->pNext;j<k;j++,q = q->pNext){
  
       if(p->data > q->data ){
       
        t = p->data;
        p->data = q->data;
        q->data = t;
       
       } 
  
   }
 }

 
}

实现效果:

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# C语言数据结构之双向循环链表  # 循环链表  # C语言实现带头双向循环链表  # C语言编程数据结构带头双向循环链表全面详解  # C语言实现带头双向循环链表的接口  # C语言中双向链表和双向循环链表详解  # C语言 超详细介绍与实现线性表中的无头单向非循环链表  # 链表  # 为空  # 遍历  # 数据结构  # 希望能  # 请输入  # 谢谢大家  # 输入您  # Node  # pNext 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  网站制作报价单模板图片,小松挖机官方网站报价?  如何快速生成高效建站系统源代码?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  lovemo网页版地址 lovemo官网手机登录  Laravel如何创建自定义中间件?(Middleware代码示例)  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  无锡营销型网站制作公司,无锡网选车牌流程?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  如何在IIS中配置站点IP、端口及主机头?  如何利用DOS批处理实现定时关机操作详解  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  详解Android——蓝牙技术 带你实现终端间数据传输  Android自定义listview布局实现上拉加载下拉刷新功能  如何在建站之星绑定自定义域名?  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  昵图网官方站入口 昵图网素材图库官网入口  如何基于PHP生成高效IDC网络公司建站源码?  Swift中switch语句区间和元组模式匹配  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  如何在Windows环境下新建FTP站点并设置权限?  如何在云虚拟主机上快速搭建个人网站?  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  EditPlus中的正则表达式 实战(4)  如何在Ubuntu系统下快速搭建WordPress个人网站?  如何正确选择百度移动适配建站域名?  清除minerd进程的简单方法  重庆市网站制作公司,重庆招聘网站哪个好?  如何用y主机助手快速搭建网站?  Linux安全能力提升路径_长期防护思维说明【指导】  如何做网站制作流程,*游戏网站怎么搭建?  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  Laravel中的Facade(门面)到底是什么原理  零基础网站服务器架设实战:轻量应用与域名解析配置指南  Laravel如何处理文件下载请求?(Response示例)  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Python自动化办公教程_ExcelWordPDF批量处理案例  实例解析Array和String方法  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  JavaScript如何实现音频处理_Web Audio API如何工作?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Laravel如何使用Blade组件和插槽?(Component代码示例)  EditPlus中的正则表达式实战(6)  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】