顺序栈

顺序链表部分
#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
#include <stdio.h>
#include <malloc.h>
#include "SeqList_V2.h"

typedef unsigned int TSeqListNode;

typedef struct _tag_SeqList{
	int length;
	int capacity;
	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->length = 0;
		ret->capacity = capacity;
		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;
	} 
}

int SeqList_Length(SeqList* list)
{
	int ret = -1;
	TSeqList* sList = (TSeqList*)list;
	if(sList != NULL){
		ret = sList->length;
	} 
	return ret;
}

int SeqList_Capacity(SeqList* list)
{
	int ret = -1;
	TSeqList* sList = (TSeqList*)list;
	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) && (node != NULL) && (pos >= 0) && (sList->length < sList->capacity);
	int i = 0;
	if(ret){
		if(pos > sList->length){
			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)
{
	SeqListNode* ret = NULL;
	TSeqList* sList = (TSeqList*)list;
	if((sList != NULL) && (pos >= 0) && (pos < sList->length)){
		ret = (SeqListNode*)(sList->node[pos]);//将整数赋值给指针,也要类型转换,注意运算符的优先级和结合性  
	}
	return ret;
}

SeqListNode* SeqList_Delete(SeqList* list,int pos)
{
	SeqListNode* ret = SeqList_Get(list,pos);
	TSeqList* sList = (TSeqList*)list;
	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;
}

顺序栈部分

#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_Size(SeqStack* stack);

int SeqStack_Capacity(SeqStack* stack);

int SeqStack_Push(SeqStack* stack,void* item);

void* SeqStack_Pop(SeqStack* stack);

void* SeqStack_Top(SeqStack* stack);

#endif

#include "SeqList_V2.h"
#include "SeqStack.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_Size(SeqStack* stack)
{
	return SeqList_Length(stack); 
}

int SeqStack_Capacity(SeqStack* stack)
{
	return SeqList_Capacity(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);
}

测试程序

#include <stdio.h>
#include <stdlib.h>
#include "SeqStack.h"

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值