使用之前實現了的鍊錶實現了資料結構中的動態棧。
下面是main.c檔案:
#include
"dynamicstack.h"
#include
intmain()
len =
dynamicstacklength
(stack)
;printf
("此時棧的長度為:%d\n\n"
, len)
;for
(i =
0; i <
5; i++)
len =
dynamicstacklength
(stack)
;printf
("此時棧的長度為:%d\n\n"
, len)
;printf
("開始列印棧中元素:\n");
for(i =
0; i < len; i++
)dynamicstackdestroy
(stack);}
return0;
}
下面是dynamicstack.**件:
#ifndef __dynamicstack_h__
#define __dynamicstack_h__
#include
#include
#include
"linklist.h"
struct
(dynamicstack)
;dynamicstack*
dynamicstackcreate
(void);
dynamicstack*
dynamicstackdestroy
(dynamicstack *stack)
;int
dynamicstacklength
(dynamicstack *stack)
;bool dynamicstackpush
(dynamicstack *stack, datatype data)
;bool dynamicstackpop
(dynamicstack *stack, datatype *data)
;bool dynamicstacktop
(dynamicstack *stack, datatype *data)
;#endif
下面是dynamicstack.c檔案:
#include
"dynamicstack.h"
dynamicstack*
dynamicstackcreate
(void
)else
}return stack;
}dynamicstack*
dynamicstackdestroy
(dynamicstack *stack)
return
null;}
intdynamicstacklength
(dynamicstack *stack)
bool dynamicstackpush
(dynamicstack *stack, datatype data)
}return ret;
}bool dynamicstackpop
(dynamicstack *stack, datatype *data)
}return ret;
}bool dynamicstacktop
(dynamicstack *stack, datatype *data)
return ret;
}
下面是linklist.**件:
#ifndef __linklist_h__
#define __linklist_h__
typedef
int datatype;
#define debug() printf("file = %s\nline = %d\n", __file__, __line__)
#include
#ifndef __cplusplus
typedef
int bool;
#define true 1
#define false 0
#else
typedef bool bool;
#endif
#define malloc(type, size) (type*)malloc(sizeof(type) * size)
#define free(p) (free(p), p = null)
#define struct(type) typedef struct __struct##type type;\
struct __struct##type
struct
(llnode)
;struct
(linklist)
;linklist*
linklistcreate
(void);
linklist*
linklistdestroy
(linklist *list)
;int
linklistlength
(linklist *list)
;bool linklistinsert
(linklist *list,
int i, datatype data)
;bool linklistdelete
(linklist *list,
int i, datatype *data)
;int
linklistfind
(linklist *list, datatype data)
; bool linklistset
(linklist *list,
int i, datatype data)
;bool linklistget
(linklist *list,
int i, datatype *data)
;llnode*
linklistmove
(linklist *list,
int i)
;bool linklistend
(linklist *list)
;void
linklistnext
(linklist *list)
;datatype linklistcurrent
(linklist *list)
;#endif
下面是linklist.c檔案:
#include
"linklist.h"
linklist*
linklistcreate
(void
)//o(1)
return list;
}linklist*
linklistdestroy
(linklist *list)
//o(n)
free
(list);}
return
null;}
intlinklistlength
(linklist *list)
//o(1)
bool linklistinsert
(linklist *list,
int i, datatype data)
//o(n)
else
list->len++;}
else
}return ret;
}bool linklistdelete
(linklist *list,
int i, datatype* data)
//o(n)
else
free
(node)
; list->len--;}
return ret;
}bool linklistset
(linklist *list,
int i, datatype data)
//o(n)
bool linklistget
(linklist *list,
int i, datatype* data)
//o(n)
//下面四個配合使用用於遍歷鍊錶,時間複雜度為o(n)
llnode*
linklistmove
(linklist *list,
int i)
ret = node;
list->m_current = node;}}
return ret;
}bool linklistend
(linklist *list)
void
linklistnext
(linklist *list)
}datatype linklistcurrent
(linklist *list)
intlinklistfind
(linklist *list, datatype data)
//o(n)}}
return ret;
}
下面是執行結果:
C語言實現棧 基於陣列
棧是一種操作受限的資料結構,只允許從一段操作,而且先進後出 filo first in last out 這裡將棧的操作封裝在c語言的標頭檔案裡 實現棧的 如下 include define maxsize 10 typedef int datatype sequence stack 實現順序棧,使...
C語言基於鍊錶的棧
學習資料結構與演算法時實現的棧,參考書目 資料結構與演算法分析 c語言描述 以及在後面會分析我遇到的乙個問題。標頭檔案 stack.h 功能 基於鍊錶的棧,棧頂在表頭 ifndef stack header h define stack header h typedef struct node pn...
C 動態棧的建立
一 什麼是棧 棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪...