//工程文件
在这里#include "xhtretle.h"
//创建
tretle tretle_create(){
tretle l=(tretle)malloc(sizeof(node));
if(l==NULL){
printf("创建失败\n");
return NULL;
}
l->data=0;
l->len=0;
l->next=l;
printf("创建成功\n");
return l;
}
//申请节点封装数据
tretle tretle_package(tretle l,datatype e){
if(l==NULL){
printf("封装数据失败\n");
return NULL;
}
tretle p=(tretle)malloc(sizeof(node));
p->data=e;
p->next=NULL;
printf("封装数据成功\n");
return p;
}
//判空
int tretle_pk(tretle l){
if(l==NULL){
printf("判空失败\n");
return 0;
}
return l->next==l?1:0;
}
//入栈
int tretle_push(tretle l,datatype e){
if(l==NULL){
printf("入栈失败\n");
return 0;
}
tretle p=tretle_package(l,e);
tretle q=l;
while(q->next!=l){
q=q->next;
}
q->next=p;
p->next=l;
l->len++;
printf("入栈成功\n");
return 0;
}
//遍历
void tretle_show(tretle l){
if(l==NULL||tretle_pk(l)){
printf("遍历失败\n");
return ;
}
tretle p=l->next;
do{
printf("%d\t",p->data);
p=p->next;
}while(p!=l);
printf("\n");
printf("遍历成功\n");
return ;
}
//出栈
void tretle_pop(tretle l){
if(l==NULL||tretle_pk(l)){
printf("入栈失败\n");
return ;
}
tretle p=l->next;
while(p->next->next!=l){
p=p->next;
}
tretle q=p->next;
if(p->next==l){
printf("%d出栈成功\n",p->data);
l->next=l;
free(p);
p=NULL;
}else{
printf("%d出栈成功\n",q->data);
p->next=q->next;
free(q);
q=NULL;
}
return ;
}
//销毁
void tretle_free(tretle* l){
if(*l==NULL){
printf("销毁失败\n");
return ;
}
while((*l)->next!=(*l)){
tretle_pop(*l);
}
free(*l);
*l=NULL;
printf("销毁成功\n");
return ;
}
插入代码片
//主函数
#include "xhtretle.h"
int main(int argc, const char *argv[])
{
tretle l=tretle_create();
if(l==NULL){
printf("创建失败\n");
return 0;
}
tretle_push(l,1);
tretle_push(l,2);
tretle_push(l,3);
tretle_push(l,4);
tretle_push(l,5);
tretle_show(l);
tretle_pop(l);
tretle_pop(l);
tretle_show(l);
tretle_free(&l);
tretle_show(l);
return 0;
}
//头文件
在这里插入#ifndef __XHTRETLE_H__
#define __XHTRETLE_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int datatype;
typedef struct node{
union{
datatype data;
int len;
};
struct node* next;
}*tretle,node;
//创建
tretle tretle_create();
//申请节点封装数据
tretle tretle_package(tretle l,datatype e);
//判空
int tretle_pk(tretle l);
//入栈
int tretle_push(tretle l,datatype e);
//出栈
void tretle_pop(tretle l);
//遍历
void tretle_show(tretle l);
//销毁
void tretle_free(tretle* l);
#endif
代码片