C語言實現出入棧操作
在看程式設計正規化學習視訊時看到棧的相關操作,便將其所講自己下來測試了下,程式碼如下:
/*
*功能:實現棧的基本操作
*作者:xautjzd
*時間:2013.2.27
* */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
void *elems;
int elemSize;
int logLength;
int allocLength;
}stack;
void stackNew(stack *s,int elemSize);
void stackDispose(stack *s);
void stackPush(stack *s,void *elemAddr);
void stackPop(stack *s,void *elemAddr);
int main(){
stack s;
stackNew(&s,sizeof(int));
int array[4]={1,2,3,4};
int m,i;
for(i=0;i<sizeof(array)/sizeof(array[0]);i++)
stackPush(&s,&array[i]);
while(s.logLength!=0){
stackPop(&s,&m);
printf("%d ",m);
}
printf("\n");
}
void stackNew(stack *s,int elemSize){
s->logLength=0;
s->allocLength=4;
s->elemSize=elemSize;
s->elems=malloc(4*elemSize);
}
void stackDispose(stack *s){
free(s);
}
void stackPush(stack *s,void *elemAddr){
if(s->logLength==s->allocLength)
{
s->allocLength*=2;
s->elems=realloc(s->elems,s->allocLength*s->elemSize);
}
void *pt=(char *)s->elems + s->logLength*s->elemSize;
memcpy(pt,elemAddr,s->elemSize);
s->logLength++;
}
void stackPop(stack *s,void *elemAddr){
void *pt=(char *)s->elems+(s->logLength-1)*s->elemSize;
memcpy(elemAddr,pt,s->elemSize);
s->logLength--;
}
相關文章
- C語言資料結構:鏈式棧及其出入棧C語言資料結構
- C語言資料結構:順序棧的建立、出入棧,以及使用順序棧實現十進位制轉十六進位制C語言資料結構
- c語言順序棧常規插入刪除操作C語言
- C語言資料結構:鏈式佇列的建立及其出入隊操作C語言資料結構佇列
- C語言函式呼叫棧C語言函式
- C語言位操作C語言
- 10-C++實現棧的常見操作C++
- c語言實現階乘C語言
- 掃雷--C語言實現C語言
- 資料結構c語言實現順序表基本操作資料結構C語言
- 高精度加法(C語言實現)C語言
- c語言實現this指標效果C語言指標
- C語言實現檔案加密C語言加密
- C語言實現TCP通訊C語言TCP
- C語言__LINE__實現原理C語言
- C語言/C++程式設計學習:棧的程式碼實現之陣列方案C語言C++程式設計陣列
- 鏈式棧介面設計(C語言)C語言
- ARM下C語言棧幀機制C語言
- 高精度減法(C語言實現)C語言
- C語言實現推箱子游戲C語言
- C語言實現繼承多型C語言繼承多型
- C語言實現桌面貪吃蛇C語言
- 排序演算法-C語言實現排序演算法C語言
- 資料結構 順序棧(c語言)資料結構C語言
- C 語言實現泛型 swap 函式泛型函式
- PID演算法的C語言實現演算法C語言
- C語言如何實現繼承及容器C語言繼承
- C語言實現矩陣螺旋輸出C語言矩陣
- Object-C語言Block的實現方式ObjectC語言BloC
- 【資料結構】用C語言實現單連結串列及其常見操作資料結構C語言
- Go語言SQL操作實戰GoSQL
- 探秘掃雷遊戲的C語言實現遊戲C語言
- C語言回撥日誌庫的實現C語言
- C語言陣列實現三子棋C語言陣列
- c 語言實現 tcp/udp 伺服器功能TCPUDP伺服器
- 線性表-順序表C語言實現C語言
- C語言實現多級濾波—乾貨C語言
- C語言如何實現泛型程式設計?C語言泛型程式設計
- C語言怎麼實現可變引數C語言