数据结构学习之双向循环链表操作

来源:互联网 发布:移动硬盘mac不显示 编辑:程序博客网 时间:2024/04/29 17:05

链表头文件

#ifndef _LIST_H_#define _LIST_H_#include<stdio.h>#include<stdlib.h>typedef struct _list{int m_data;struct _list * next;struct _list * prev;}list,*node;void listCreate(list * t_list);void listHeadInsert(list * t_list,int t_data);void listTailInsert(list * t_list,int t_data);void listDelete(list * t_list,int t_data);node listFind(list * t_list,int t_data);void listModify(list * t_list,int t_old,int t_new);void listDestroy(list * t_list);void listDisplayAsc(list * t_list);void listDisplayDesc(list * t_list);#endif

函数实现

#include "list.h"void listCreate(list * t_list){//链表内数据初始化t_list->m_data = -1;//双向循环链表初始化时next,prev均指向自己t_list->next = t_list;t_list->prev = t_list;}void listHeadInsert(list * t_list,int t_data){//声明一个结点,并申请内存node t_node = (node)malloc(sizeof(list));//节点内容赋值t_node->m_data = t_data;//接待内prev和next指向赋值t_node->prev = t_list;t_node->next = t_list->next;//链表内链接节点t_list->next->prev = t_node;t_list->next = t_node;}void listTailInsert(list * t_list,int t_data){//声明一个节点node t_node = (node)malloc(sizeof(list));//节点内容赋值t_node->m_data = t_data;//节点prev和next指向赋值t_node->next = t_list;t_node->prev = t_list->prev;t_list->prev->next = t_node;t_list->prev = t_node;}node listFind(list * t_list,int t_data){node t_node = NULL;//遍历链表node t_temp;for(t_temp = t_list->next;t_temp != t_list;t_temp = t_temp->next){//如果节点存在if(t_temp->m_data == t_data){//记录并退出t_node = t_temp;break;}}return t_node;}void listModify(list * t_list,int t_old,int t_new){//查找节点node t_node = listFind(t_list,t_old);//如果不存在该内容节点if(NULL == t_node){//直接结束函数return;}//节点内容赋值t_node->m_data = t_new;}void listDelete(list * t_list,int t_data){//查找节点node t_node = listFind(t_list,t_data);//如果不存在该内容节点if(NULL == t_node){//直接结束该函数return;}//当前节点的前一个节点的next,指向当前节点的下一个t_node->prev->next = t_node->next;//当前节点的下一节点的prev指向当前节点的上一个t_node->next->prev = t_node->prev;}void listDestroy(list * t_list){//声明两个节点node t_temp,t_node;//获取当前节点的后一节点t_temp = t_list->next;while(t_temp != t_list){t_node = t_temp;t_temp = t_temp->next;free(t_node);}t_node = NULL;}void listDisplayAsc(list * t_list){node t_temp;for(t_temp = t_list->next;t_temp != t_list;t_temp = t_temp->next){printf("%d ",t_temp->m_data);}printf("\n");}void listDisplayDesc(list * t_list){node t_temp;    for(t_temp = t_list->prev;t_temp != t_list;t_temp = t_temp->prev){printf("%d ",t_temp->m_data);}printf("\n");}

主函数调用

#include "list.h"int main(void){//list t_list;list * t_list = (list *)malloc(sizeof(list));listCreate(t_list);int i = 0;for(i = 0;i < 10;i++){listHeadInsert(t_list,i);}node t_node = listFind(t_list,7);printf("%d\n",t_node->m_data);listModify(t_list,1,99);listDelete(t_list,3);listDisplayAsc(t_list);listDisplayDesc(t_list);listDestroy(t_list);free(t_list);t_list = NULL;printf("你好,明天\n");return 0;}


0 0
原创粉丝点击