C言語スタックの実現
2656 ワード
最近、javaメモリ管理を研究する時、スタックなどのデータ構造の方面の内容によく会います.スタックの関連内容は長い間温習されていませんので、ここでC言語で簡単に実現することにしました.後で自分で確認してもいいです.基礎データ構造を復習しながら、C言語も復習します.ナンセンスは言わずに直接コードします.
stack.h
stack.h
#include
#include
typedef struct node {
char *name;
int grade;
int age;
struct node *next;
} *StackNode, node;
typedef struct Stack {
StackNode top;
StackNode bottom;
} Stack;
//
void init(Stack *pstack);
//
void push(Stack *pstack, StackNode pnode );
//
StackNode pop(Stack *pstack);
//
int isEmpty(Stack *pstack);
//
void ClearAll(Stack *pstack);
以下は圧スタック、弾スタック、クリア、遍歴などの操作の具体的な実現です.#include"stack.h"
void init(Stack *pstack) {
pstack->top = (StackNode)malloc(sizeof(node));
if (pstack->top == NULL) {
printf(" !
");
return;
}
pstack->bottom = pstack->top;
pstack->top->next = NULL;
}
int isEmpty(Stack *pstack) {
if (pstack == NULL) {
printf(" !
");
return 0;
}
else {
if (pstack->top == pstack->bottom)
return 1;
else
return 0;
}
}
void push(Stack *pstack, StackNode pnode) {
if (pstack == NULL)
printf(" : !
");
pnode->next = pstack->top;
pstack->top = pnode;
}
StackNode pop(Stack *pstack) {
StackNode result = NULL;
if (isEmpty(pstack)) {
printf(" , !
");
}
else {
result = pstack->top;
pstack->top = pstack->top->next;
}
return result;
}
void ClearAll(Stack *pstack) {
if (isEmpty(pstack))
return;
StackNode p = pstack->top;
StackNode q = NULL;
while(p != pstack->bottom) {
q = p->next;
free(p);
p = q;
}
pstack->top = pstack->bottom;
}
void print(Stack *pstack) {
if (pstack == NULL)
printf(" : !");
else if (pstack->top == pstack->bottom) {
printf(" !
");
}
else {
StackNode p = pstack->top;
while (p != pstack->bottom) {
printf(" :%s\t :%d\t :%d
",p->name, p->grade, p->age);
p = p->next;
}
}
}
int main() {
Stack *pstack;
init(pstack);
StackNode pnode = (StackNode)malloc(sizeof(node));
pnode->name = "karno";
pnode->grade = 100;
pnode->age = 23;
push(pstack, pnode);
print(pstack);
StackNode result = pop(pstack);
print(pstack);
return 0;
}