日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构 线性链表栈

發布時間:2023/12/18 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构 线性链表栈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#ifndef _MY_LINKSTACK_H_ #define _MY_LINKSTACK_H_typedef void LinkStack;//創建鏈表棧 LinkStack* LinkStack_Create();//銷毀鏈表棧 int LinkStack_Destroy(LinkStack** stack);//清空鏈表棧 int 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_ //鏈式棧代碼實現 #include<stdio.h> #include<stdlib.h> #include<string.h> #include"LinkList.h"//調用鏈表動態庫 #include"linkstack.h"/* 自己構造結構體的必要性 鏈表棧是調用線性鏈表動態庫實現的 線性鏈表必須要求結構體中有LinkNode類型的屬性 但是用戶未必會讓自己的結構體帶這個屬性,必須由棧實現方法里帶上 */ typedef struct _TLinkStack{LinkNode node;void * item; }TLinkStack;//創建鏈表棧 LinkStack* LinkStack_Create(){return (LinkStack*)LinkList_Create(); }//銷毀鏈表棧 int LinkStack_Destroy(LinkStack** stack){int ERRO_MSG = 0;/*刪除的時候,先清空鏈表,然后再刪除*/ERRO_MSG=LinkStack_Clear(*stack);//銷毀鏈表ERRO_MSG = LinkList_Destroy(stack);return ERRO_MSG; }//清空鏈表棧 /* 因為TLinkStack是我們幫用戶創建的,不是用戶自己的結構體,所以用戶不可能會釋放,只能由我們來實現必須循環遍歷 一個個的刪除 */ int LinkStack_Clear(LinkStack* stack){int ERRO_MSG = 0;while (LinkList_Length(stack)){//一個個刪除元素 從第一個開始刪除 減少遍歷次數TLinkStack * temp = (TLinkStack *)LinkList_Delete(stack, 0);if (temp!=NULL){free(temp);temp = NULL;}}//將元素個數置零ERRO_MSG = LinkList_Clear(stack);return ERRO_MSG; }//壓棧 /* 對于鏈表而言,從尾部插入,需要遍歷前面的所有節點,還是從頭結點插入比較效率 */ int LinkStack_Push(LinkStack* stack, void* item){int ERRO_MSG = 0;//臨時變量必須mallocTLinkStack * tstack = (TLinkStack *)malloc(sizeof(TLinkStack));if (tstack==NULL){ERRO_MSG = -1;printf("分配內存失敗!erro msg:%d \n", ERRO_MSG);return ERRO_MSG;}//初始化內存memset(tstack, 0, sizeof(TLinkStack));//將用戶數據賦值到內存中tstack->item = item;//用頭插法插入元素ERRO_MSG=LinkList_Insert(stack, (LinkNode *)tstack, 0);return ERRO_MSG; }//出棧 void* LinkStack_Pop(LinkStack* stack){//刪除棧頂元素TLinkStack *tstack = (TLinkStack *)LinkList_Delete(stack, 0);//定義返回變量void * ret = NULL;if (tstack!=NULL){ret = tstack->item;free(tstack);tstack = NULL;}return ret; }//獲取棧頂元素 void* LinkStack_Top(LinkStack* stack){//定義返回變量void * ret = NULL;//獲取第0個節點元素TLinkStack *tstack = (TLinkStack *)LinkList_Get(stack, 0);if (tstack!=NULL){ret = tstack->item;}return ret; }//獲取棧的大小 int LinkStack_Size(LinkStack* stack){return LinkList_Length(stack); } //鏈表棧的測試代碼 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> #include"linkstack.h"typedef struct _Student{char name[30];int age; }Student;void Test(){Student s1, s2, s3, s4, s5;int numx = 0, i = 0, ret = 0;strcpy(s1.name, "小米");s1.age = 11;strcpy(s2.name, "小剛");s2.age = 12;strcpy(s3.name, "小紅");s3.age = 10;strcpy(s4.name, "嘯天");s4.age = 13;strcpy(s5.name, "蓮華");s5.age = 12;LinkStack *stack = NULL;//創建棧stack = LinkStack_Create();//壓棧ret = LinkStack_Push(stack, &s1);if (ret != 0){printf("入棧失敗!\n");return;}ret = LinkStack_Push(stack, &s2);if (ret != 0){printf("入棧失敗!\n");return;}ret = LinkStack_Push(stack, &s3);if (ret != 0){printf("入棧失敗!\n");return;}ret = LinkStack_Push(stack, &s4);if (ret != 0){printf("入棧失敗!\n");return;}ret = LinkStack_Push(stack, &s5);if (ret != 0){printf("入棧失敗!\n");return;}numx = LinkStack_Size(stack);//出棧for (i = 0; i < numx; i++){Student *temp = (Student *)LinkStack_Pop(stack);printf("我的名字是%s;我的年齡是%d\n", temp->name, temp->age);}//清空棧ret = LinkStack_Clear(stack);if (ret != 0){printf("銷毀鏈表失敗!\n");return;}//銷毀棧LinkStack_Destroy(&stack); }void main(){Test();system("pause"); }

?

轉載于:https://www.cnblogs.com/zhanggaofeng/p/5697502.html

總結

以上是生活随笔為你收集整理的数据结构 线性链表栈的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。