分为:顺序存储和链式存储
链式存储:
struct.h:
#ifndef _STRUCT_H
#define _STRUCT_H
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
typedef struct infonode
{
int a;
struct infonode *next;
}info, *pinfo;
void init(pinfo *p);
void add(pinfo *p, int num);
int out(pinfo *p);
bool is_empty(pinfo p);
void show(pinfo p);
#endif
func.c:
#include"struct.h"
//初始化
void init(pinfo *p)
{
#if 0
(*p) = NULL;
#endif
*p = (pinfo)malloc(sizeof(info));
if(*p == NULL)
{
perror("malloc failed in init function");
exit(1);
}
(*p)->next = NULL;
}
//入栈
void add(pinfo *p, int num)
{
pinfo new;
new = (pinfo)malloc(sizeof(info));
if(new == NULL)
{
perror("malloc failed");
return ;
}
new->a = num;
new->next = *p;
*p = new;
}
//出栈
int out(pinfo *p)
{
int data;
pinfo temp;
if(is_empty((*p)))
{
printf("not any data\n");
return 0;
}
data = (*p)->a;
temp = (*p);
(*p) = (*p)->next;
free(temp);
return data;
}
//判空
bool is_empty(pinfo p)
{
#if 0
if(p == NULL)
#endif
if(p->next == NULL)
return true;
else
return false;
}
//遍历
void show(pinfo p)
{
#if 0
while(p != NULL)
#endif
while(p->next != NULL)
{
printf("%d ", p->a);
p = p->next;
}
printf("\n");
}
main.c:
#include"struct.h"
int main(void)
{
int a[10] = {234,234,2423,2,3423,1213};
int i;
pinfo top;
init(&top);
for(i = 0; i < 10; i++)
{
add(&top, a[i]);
}
printf("first show:");
show(top);
printf("after first out: ");
out(&top);
show(top);
return 0;
}