发布时间:2025-12-10 22:49:15 浏览次数:1
头文件:link_0505.h
/*链表演示*/#ifndef__LINK_0505#define__LINK_0505typedefstructnode{intnum;structnode*p_next;}node;typedefstruct{nodehead,tail;}link;//链表的初始化函数voidlink_init(link*);//链表的清理函数voidlink_deinit(link*);//判断链表是否空的函数intlink_empty(link*);//判断链表是否满的函数intlink_full(link*);//统计有效数字个数的函数intlink_size(link*);//在最前边插入数字的函数intlink_add_head(link*,int);//在最后边插入新的数字的函数intlink_append(link*,int);//把数字按照顺序插入到链表的函数intlink_insert(link*,int);//删除最前面数字的函数intlink_remove_head(link*);//删除最后一个有效数字intlink_remove_tail(link*);//删除某个给定数字的函数intlink_remove(link*,int);//获得第一个有效数字的函数intlink_get_head(link*,int*);//获得最后一个有效数字的函数intlink_get_tail(link*,int*);//获得指定编号数字的函数intlink_get(link*,int*,int);#endif实现代码: link_0505.cpp
/*链表演示*/#include"stdlib.h"#include"link_0505.h"//链表的初始化函数voidlink_init(link*p_link){p_link->head.p_next=&(p_link->tail);}//链表的清理函数voidlink_deinit(link*p_link){while(p_link->head.p_next!=&(p_link->tail)){node*p_first=&(p_link->head);node*p_mid=p_first->p_next;node*p_last=p_mid->p_next;p_first->p_next=p_last;free(p_mid);p_mid=NULL;}}//判断链表是否空的函数intlink_empty(link*p_link){returnp_link->head.p_next==&(p_link->tail);}//判断链表是否满的函数intlink_full(link*p_link){return0;}//统计有效数字个数的函数intlink_size(link*p_link){intcnt=0;node*p_node=NULL;for(p_node=&(p_link->head);p_node!=&(p_link->tail);p_node=p_node->p_next){node*p_first=p_node;node*p_mid=p_first->p_next;node*p_last=p_mid->p_next;if(p_mid!=&(p_link->tail)){cnt++;}}returncnt;}//在最前边插入数字的函数intlink_add_head(link*p_link,intnum){node*p_temp=(node*)malloc(sizeof(node));if(!p_temp){return0;}p_temp->num=num;node*p_first=&(p_link->head);node*p_mid=p_first->p_next;node*p_last=p_mid->p_next;p_first->p_next=p_temp;p_temp->p_next=p_mid;return1;}//在最后边插入新的数字的函数intlink_append(link*p_link,intnum){node*p_tmp=(node*)malloc(sizeof(node));node*p_node=NULL;if(!p_tmp){return0;}p_tmp->num=num;for(p_node=&(p_link->head);p_node!=&(p_link->tail);p_node=p_node->p_next){node*p_first=p_node;node*p_mid=p_first->p_next;node*p_last=p_mid->p_next;if(p_mid==&(p_link->tail)){p_first->p_next=p_tmp;p_tmp->p_next=p_mid;break;}}return1;}//把数字按照顺序插入到链表的函数intlink_insert(link*p_link,intnum){node*p_temp=(node*)malloc(sizeof(node));node*p_node=NULL;if(!p_temp){return0;}p_temp->num=num;p_temp->p_next=NULL;for(p_node=&(p_link->head);p_node!=&(p_link->tail);p_node=p_node->p_next){node*p_first=p_node;node*p_mid=p_first->p_next;node*p_last=p_mid->p_next;if(p_mid==&(p_link->tail)||p_mid->num>p_temp->num){p_first->p_next=p_temp;p_temp->p_next=p_mid;break;}}return0;}//删除最前面数字的函数intlink_remove_head(link*p_link){node*p_first=&(p_link->head);node*p_mid=p_first->p_next;node*p_last=p_mid->p_next;if(p_link->head.p_next==&(p_link->tail)){return0;}p_first->p_next=p_last;free(p_mid);p_mid=NULL;}//删除最后一个有效数字intlink_remove_tail(link*p_link){node*p_node=NULL;for(p_node=&(p_link->head);p_node!=&(p_link->tail);p_node=p_node->p_next){node*p_first=p_node;node*p_mid=p_first->p_next;node*p_last=p_mid->p_next;if(p_last==&(p_link->tail)){p_first->p_next=p_last;free(p_mid);p_mid=NULL;return1;}}return0;}//删除某个给定数字的函数intlink_remove(link*p_link,intnum){node*p_node=NULL;for(p_node=&(p_link->head);p_node!=&(p_link->tail);p_node=p_node->p_next){node*p_first=p_node;node*p_mid=p_first->p_next;node*p_last=p_mid->p_next;if(p_mid!=&(p_link->tail)&&p_mid->num==num){p_first->p_next=p_last;free(p_mid);p_mid=NULL;return1;}}return0;}//获得第一个有效数字的函数intlink_get_head(link*p_link,int*p_num){if(p_link->head.p_next==&(p_link->tail)){return0;}node*p_first=&(p_link->head);node*p_mid=p_first->p_next;node*p_last=p_mid->p_next;p_first->p_next=p_last;*p_num=p_mid->num;return1;}//获得最后一个有效数字的函数intlink_get_tail(link*p_link,int*p_num){node*p_node=NULL;for(p_node=&(p_link->head);p_node!=&(p_link->tail);p_node=p_node->p_next){node*p_first=p_node;node*p_mid=p_first->p_next;node*p_last=p_mid->p_next;if(p_last==&(p_link->tail)){*p_num=p_mid->num;return1;}}return0;}//获得指定编号数字的函数intlink_get(link*p_link,int*p_num,intnum){intcnt=0;node*p_node=NULL;for(p_node=&(p_link->head);p_node!=&(p_link->tail);p_node=p_node->p_next){node*p_first=p_node;node*p_mid=p_first->p_next;node*p_last=p_mid->p_next;if(p_mid!=&(p_link->tail)&&cnt==num){*p_num=p_mid->num;return1;}cnt++;}return0;}测试函数:
/**链表测试**/#include<stdio.h>#include"link_0505.h"intmain(){intsize=0,num=0,val=0;linklnk={0};link_init(&lnk);link_add_head(&lnk,30);link_add_head(&lnk,20);link_append(&lnk,90);link_append(&lnk,100);link_insert(&lnk,50);link_insert(&lnk,60);link_insert(&lnk,40);link_insert(&lnk,80);link_insert(&lnk,70);size=link_size(&lnk);for(num=0;num<=size-1;num++){link_get(&lnk,&val,num);printf("%d",val);}printf("\n");printf("------------------");link_remove_head(&lnk);link_remove_tail(&lnk);link_remove(&lnk,70);size=link_size(&lnk);for(num=0;num<=size-1;num++){link_get(&lnk,&val,num);printf("%d",val);}printf("\n");link_get_head(&lnk,&val);printf("最前面的数字是%d\n",val);link_get_tail(&lnk,&val);printf("最后面的数字是%d\n",val);link_deinit(&lnk);return0;}