博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C 栈 链式存储
阅读量:4676 次
发布时间:2019-06-09

本文共 5791 字,大约阅读时间需要 19 分钟。

#ifndef _MY_LINKSTACK_H_#define _MY_LINKSTACK_H_typedef void LinkStack;LinkStack* LinkStack_Create();void LinkStack_Destroy(LinkStack* stack);void LinkStack_Clear(LinkStack* stack);int LinkStack_Push(LinkStack* stack, void* item);void* LinkStack_Pop(LinkStack* stack);void* LinkStack_Top(LinkStack* stack);int LinkStack_Size(LinkStack* stack);#endif //_MY_LINKSTACK_H_
#define  _CRT_SECURE_NO_WARNINGS #include 
#include
#include
#include "linkstack.h"#include "linklist.h"typedef struct _tag_LinkStack{ LinkListNode node; void* item;}TLinkStack;//创建一个栈 相当于 创建一个线性表LinkStack* LinkStack_Create(){ return LinkList_Create();}void LinkStack_Destroy(LinkStack* stack){ LinkStack_Clear(stack); //释放栈的 结点 LinkList_Destroy(stack); //释放句柄}void LinkStack_Clear(LinkStack* stack){ while (LinkList_Length(stack) > 0) { LinkStack_Pop(stack); } return ;}//向栈中添加元素 相等向 线性表中 添加结点int LinkStack_Push(LinkStack* stack, void* item){ int ret = 0; TLinkStack *tmp = NULL; //// void* item 栈结点 ===>链表结点 tmp = (TLinkStack *)malloc(sizeof(TLinkStack)); tmp->item = item; ret = LinkList_Insert(stack, (LinkListNode *)tmp, 0); if (ret != 0) { printf("func LinkList_Insert() err:%d \n", ret); free(tmp); return ret; } return ret;}//从栈中 弹出 元素 相当于 从线性表中 删除0号位置元素void* LinkStack_Pop(LinkStack* stack){ TLinkStack *tmp = NULL; void *item = NULL; tmp = (TLinkStack*) LinkList_Delete(stack, 0); if (tmp == NULL) { printf("func LinkList_Delete() err \n"); return NULL; } //把链表节点 ====>转换成 栈结点 item = tmp->item; free(tmp); return item;}//获取栈顶元素 相等于 从线性表的0号位置元素void* LinkStack_Top(LinkStack* stack){ TLinkStack *tmp = NULL; void *item = NULL; tmp = (TLinkStack *)LinkList_Get(stack, 0); if (tmp == NULL) { printf("func LinkStack_Top() err \n"); } item = tmp->item; return item;}int LinkStack_Size(LinkStack* stack){ return LinkList_Length(stack);}
#ifndef _MYLINKLIST_H_#define _MYLINKLIST_H_typedef void LinkList;/*typedef struct _tag_LinkListNode LinkListNode;struct _tag_LinkListNode{    LinkListNode* next;};*/typedef struct _tag_LinkListNode{    struct _tag_LinkListNode* next;}LinkListNode;LinkList* LinkList_Create();void LinkList_Destroy(LinkList* list);void LinkList_Clear(LinkList* list);int LinkList_Length(LinkList* list);int LinkList_Insert(LinkList* list, LinkListNode* node, int pos);LinkListNode* LinkList_Get(LinkList* list, int pos);LinkListNode* LinkList_Delete(LinkList* list, int pos);#endif
#define  _CRT_SECURE_NO_WARNINGS #include 
#include
#include
#include "linklist.h"typedef struct _tag_LinkList{ LinkListNode header; int length;}TLinkList;//LinkList* LinkList_Create() //O(1){ TLinkList *tmp = NULL; tmp = (TLinkList *)malloc(sizeof(TLinkList)); if (tmp == NULL) { printf("func LinkList_Create() err \n"); return NULL; } memset(tmp, 0, sizeof(TLinkList)); tmp->length = 0; tmp->header.next = NULL; // return tmp;}void LinkList_Destroy(LinkList* list) //O(1){ if (list == NULL) { return ; } free(list); return ;}void LinkList_Clear(LinkList* list) //O(1){ TLinkList *tList = NULL; tList = (TLinkList *)list; if (tList == NULL) { return ; } tList->header.next = NULL; tList->length = 0; return ;}int LinkList_Length(LinkList* list) //O(1){ TLinkList *tList = NULL; tList = (TLinkList *)list; if (tList == NULL) { return -1; } return tList->length;}int LinkList_Insert(LinkList* list, LinkListNode* node, int pos) //O(n){ int i = 0; LinkListNode *current = NULL; TLinkList *tList = NULL; tList = (TLinkList *)list; if (list==NULL || node==NULL || pos<0) { return -1; } current = &(tList->header); for (i=0; i
next; } //新结点 连接 后继链表 node->next = current->next; //前面的链表 连接 新结点 current->next = node; tList->length ++; return 0;}LinkListNode* LinkList_Get(LinkList* list, int pos) //O(n){ int i = 0; LinkListNode *current = NULL; TLinkList *tList = NULL; tList = (TLinkList *)list; if (list==NULL || pos<0) { return NULL; } current = &(tList->header); //赋值指针变量初始化 for (i=0; i
next; } return current->next;}LinkListNode* LinkList_Delete(LinkList* list, int pos) //O(n){ int i = 0; LinkListNode *current = NULL; LinkListNode *ret = NULL; TLinkList *tList = NULL; tList = (TLinkList *)list; if (list==NULL || pos<0) { return NULL; } current = &(tList->header); for (i=0; i
next; } ret = current->next; //缓存要删除的结点 current->next = ret->next; tList->length --; return ret;}
#define  _CRT_SECURE_NO_WARNINGS #include 
#include
#include
#include "linkstack.h"void main(){ LinkStack *stack = NULL; int a[5], i = 0; for (i=0; i<5; i++) { a[i] = i+1; } stack = LinkStack_Create(); //向栈中 添加 元素 for (i=0; i<5; i++) { LinkStack_Push(stack, &a[i]); //抛砖: 栈的结点a[i]==>转换成(适配成) 链表结点 ===>插入到链表库 } //栈的属性 printf("len:%d \n", LinkStack_Size(stack)); printf("top:%d \n", *( (int *)LinkStack_Top(stack) ) ); /* //元素 出栈 while (LinkStack_Size(stack) > 0 ) { int tmp = 0; tmp = *( (int *)LinkStack_Pop(stack) ); printf("%d ", tmp); } */ LinkStack_Destroy(stack); printf("hello...\n"); system("pause"); return ;}

 

转载于:https://www.cnblogs.com/yaowen/p/4811288.html

你可能感兴趣的文章
css3背景、边框、和补丁相关属性 (二)
查看>>
Python--小功能应用
查看>>
别做操之过急的”无效将军”,做实实在在的”日拱一卒”
查看>>
js去除范围内所有标签并显示指定字符串
查看>>
结对项目进度2
查看>>
git + git flow 的简单介绍
查看>>
如果我们想要交换两个数字,就可以使用位运算
查看>>
求给出第 K个 N位二进制数,该二进制数不得有相邻的“1”
查看>>
P1059 明明的随机数【去重排序】
查看>>
HDU 1060 Leftmost Digit【log10/求N^N的最高位数字是多少】
查看>>
tomcat配置文件web.xml与server.xml解析--重要
查看>>
【C语言】《C Primer Plus》递归:以二进制形式输出整数
查看>>
使用框架的——好处
查看>>
如此大量的代码,但每个类里面的代码却不显得特别多,原因。。。。。。。。。。。。...
查看>>
C#特征备忘
查看>>
Java 面向对象 之 final 关键字
查看>>
Contact Form 7邮件发送失败的解决办法
查看>>
P1800 software_NOI导刊2010提高(06)
查看>>
Python学习日记(1)使用if __name__ == "main"
查看>>
二进制的最大公约数
查看>>