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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

栈-顺序表(代码、分析、汇编)

發布時間:2023/12/1 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 栈-顺序表(代码、分析、汇编) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄:

    • 代碼:
    • 分析:
    • 匯編:

代碼:

SeqList.h

#ifndef _SEQLIST_H_ #define _SEQLIST_H_typedef void SeqList;//定義順序表類型 typedef void SeqListNode;//定義順序表節點類型SeqList* SeqList_Create(int capacity);void SeqList_Destroy(SeqList* list);void SeqList_Clear(SeqList* list);int SeqList_Length(SeqList* list);int SeqList_Capacity(SeqList* list);int SeqList_Insert(SeqList* list, SeqListNode* node, int pos);SeqListNode* SeqList_Get(SeqList* list, int pos);SeqListNode* SeqList_Delete(SeqList* list, int pos);#endif

SeqList.c

#include <stdio.h> #include <malloc.h> #include "SeqList.h"typedef unsigned int TSeqListNode;//定義實際使用的順序表節點類型typedef struct _tag_SeqList //定義實際使用的順序表類型 {int capacity;//容量int length;//當前長度長度TSeqListNode* node; //節點指針(數組) } TSeqList;SeqList* SeqList_Create(int capacity) //定義創建表函數 {TSeqList* ret = NULL;if( capacity >= 0 ){ret = (TSeqList*)malloc(sizeof(TSeqList) + sizeof(TSeqListNode) * capacity);}if( ret != NULL )//如果創建成功{ret->capacity = capacity;//容量賦值ret->length = 0;//當前長度賦值ret->node = (TSeqListNode*)(ret + 1);//表內的指針等于第一個節點}return ret;//返回新建表 }void SeqList_Destroy(SeqList* list) //定義銷毀表函數 {free(list); }void SeqList_Clear(SeqList* list) //定義清空重設表函數 {TSeqList* sList = (TSeqList*)list;if( sList != NULL ){sList->length = 0;//重設置0} }int SeqList_Length(SeqList* list) //定義獲取表當前長度函數 {TSeqList* sList = (TSeqList*)list;int ret = -1;if( sList != NULL ){ret = sList->length;//獲取當前表長度}return ret;//返回長度 }int SeqList_Capacity(SeqList* list) //定義獲取表容量函數 {TSeqList* sList = (TSeqList*)list;int ret = -1;if( sList != NULL ){ret = sList->capacity;//獲取容量}return ret;//返回容量 }int SeqList_Insert(SeqList* list, SeqListNode* node, int pos) //定義插入節點函數 {TSeqList* sList = (TSeqList*)list;int ret = (sList != NULL);int i = 0;ret = ret && (sList->length + 1 <= sList->capacity);//判斷表是否為空與表是否有節點插入新節點ret = ret && (0 <= pos);//判斷pos是否正常if( ret ){if( pos >= sList->length )//如果pos大于當前長度{pos = sList->length;//將插入位置設為最后一位}for(i=sList->length; i>pos; i--)//節點數據后移{sList->node[i] = sList->node[i-1];}sList->node[i] = (TSeqListNode)node;//將地址轉成使用的表節點類型(數值)賦給節點sList->length++;//長度增加}return ret; }SeqListNode* SeqList_Get(SeqList* list, int pos)//定義獲取節點數據函數 {TSeqList* sList = (TSeqList*)list;SeqListNode* ret = NULL;if( (sList != NULL) && (0 <= pos) && (pos < sList->length) )//判斷表是否為空與pos是否在范圍{ret = (SeqListNode*)(sList->node[pos]);//獲取節點數據}return ret; }SeqListNode* SeqList_Delete(SeqList* list, int pos)//定義刪除表節點函數 {TSeqList* sList = (TSeqList*)list;SeqListNode* ret = SeqList_Get(list, pos);//取得要刪除節點int i = 0;if( ret != NULL )//節點不為空{for(i=pos+1; i<sList->length; i++)//節點數據前移更改要刪除節點數據{sList->node[i-1] = sList->node[i];}sList->length--;//長度減少}return ret;//返回刪除節點 }

SeqStack.h

#ifndef _SEQSTACK_H_ #define _SEQSTACK_H_typedef void SeqStack;//定義棧類型SeqStack* SeqStack_Create(int capacity);void SeqStack_Destroy(SeqStack* stack);void SeqStack_Clear(SeqStack* stack);int SeqStack_Push(SeqStack* stack, void* item);void* SeqStack_Pop(SeqStack* stack);void* SeqStack_Top(SeqStack* stack);int SeqStack_Size(SeqStack* stack);int SeqStack_Capacity(SeqStack* stack);#endif

SeqStack.c

#include "SeqStack.h" #include "SeqList.h"//注意: 該棧只是套多一層調用順序表的函數SeqStack* SeqStack_Create(int capacity)//定義創建棧函數 {return SeqList_Create(capacity);//調用創建順序表函數 }void SeqStack_Destroy(SeqStack* stack)//定義銷毀棧函數 {SeqList_Destroy(stack);//調用銷毀順序表函數 }void SeqStack_Clear(SeqStack* stack)//定義清除棧函數 {SeqList_Clear(stack);//調用清除順序表函數 }int SeqStack_Push(SeqStack* stack, void* item)//定義添加數據到棧(進棧) {return SeqList_Insert(stack, item, SeqList_Length(stack));//調用順序表插入函數,始終插入到最后一個位置 }void* SeqStack_Pop(SeqStack* stack)//定義取出數據從棧(出棧) {return SeqList_Delete(stack, SeqList_Length(stack) - 1);//調用順序表刪除函數。刪除最一個節點,因為返回刪除節點 }void* SeqStack_Top(SeqStack* stack)//定義取出數據(不稱除節點) {return SeqList_Get(stack, SeqList_Length(stack) - 1);//調用順序表獲取最一個節點數據 }int SeqStack_Size(SeqStack* stack)//定義獲取當前棧長度函數 {return SeqList_Length(stack);//調用獲取順序表長度函數 }int SeqStack_Capacity(SeqStack* stack)//定義獲取棧容量函數 {return SeqList_Capacity(stack); }

main.c

#include <stdio.h> #include <stdlib.h> #include "SeqStack.h"int main(int argc, char *argv[]) {SeqStack* stack = SeqStack_Create(20);int a[10];int i = 0;for(i=0; i<10; i++){a[i] = i;SeqStack_Push(stack, a + i);}printf("Top: %d\n", *(int*)SeqStack_Top(stack));printf("Capacity: %d\n", SeqStack_Capacity(stack));printf("Length: %d\n", SeqStack_Size(stack));while( SeqStack_Size(stack) > 0 ){printf("Pop: %d\n", *(int*)SeqStack_Pop(stack));}SeqStack_Destroy(stack);return 0; }

分析:







匯編:



總結

以上是生活随笔為你收集整理的栈-顺序表(代码、分析、汇编)的全部內容,希望文章能夠幫你解決所遇到的問題。

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