c语言链表构造空栈,栈数组与栈链表代码实现

栈数组#include

#include

#include

#define maxn 10000

//结点设计

typedef struct stack{

int data[maxn];

int top;

}stack;

//创建

stack *init(){

stack *s=(stack *)malloc(sizeof(stack));

if(s==NULL){

printf("分配内存空间失败");

exit(0);

}

memset(s->data,0,sizeof(s->data));

//memset操作来自于库文件string.h,其表示将整个空间进行初始化

//不理解可以查阅百度百科https://baike.baidu.com/item/memset/4747579?fr=aladdin

s->top=0;     //栈的top和bottom均为0(表示为空)

return s;

}

//入栈push

void push(stack *s,int data){

s->data[s->top]=data;

s->top++;

}

//出栈pop

void pop(stack *s){

if(s->top!=0){

s->data[s->top]=0;  //让其回归0模拟表示未初始化即可

s->top--;

}

}

//模拟打印栈中元素

void print_stack(stack *s){

for(int n=s->top-1;n>=0;n--){

printf("%d\t",s->data[n]);

}

printf("\n");   //习惯性换行

}

int main(){

stack *s=init();

int input[5]={11,22,33,44,55};  //模拟五个输入数据

for(int i=0;i<5;i++){

push(s,input[i]);

}

print_stack(s);

/

pop(s);

print_stack(s);

return 0;

}

栈链表:an#include 

#include 

//栈的结点设计

//单个结点设计,数据和下一个指针

typedef struct node

{

int data;

struct node *next;

} Node;

//利用上面的结点创建栈,分为指向头结点的top指针和计数用的count

typedef struct stack

{

Node *top;

int count;

} Link_Stack;

//创建栈

Link_Stack *Creat_stack()

{

Link_Stack *p;

//p = new Link_Stack;

p=(Link_Stack*)malloc(sizeof(Link_Stack));

if(p==NULL){

printf("创建失败,即将退出程序");

exit(0);

}

p->count = 0;

p->top = NULL;

return p;

}

//入栈 push

Link_Stack *Push_stack(Link_Stack *p, int elem)

{

if (p == NULL)

return NULL;

Node *temp;

temp=(Node*)malloc(sizeof(Node));

//temp = new Node;

temp->data = elem;

temp->next = p->top;

p->top = temp;

p->count++;

return p;

}

//出栈 pop

Link_Stack *Pop_stack(Link_Stack *p)

{

Node *temp;

temp = p->top;

if (p->top == NULL)

{

printf("错误:栈为空");

return p;

}

else

{

p->top = p->top->next;

free(temp);

//delete temp;

p->count--;

return p;

}

}

//遍历栈:输出栈中所有元素

int show_stack(Link_Stack *p)

{

Node *temp;

temp = p->top;

if (p->top == NULL)

{

printf("");

printf("错误:栈为空");

return 0;

}

while (temp != NULL)

{

printf("%d\t", temp->data);

temp = temp->next;

}

printf("\n");

return 0;

}

int main()

{ //用主函数测试一下功能

Link_Stack *p;

p = Creat_stack();

int n = 5;

int input[6] = {10,20,30,40,50,60};

/以依次入栈的方式创建整个栈//

for(int i=0;i

Push_stack(p, input[i]);

}

show_stack(p);

出栈///

Pop_stack(p);

show_stack(p);

return 0;

}

PS:栈的概念被极大量的运用于各种程序设计之中,作为一种数据结构,其先进后出的特殊性质为很多算法的设计埋下伏笔,为之开通快车道。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是链表实现C语言代码: ```c #include <stdio.h> #include <stdlib.h> // 定义链表结点 typedef struct Node{ int data; struct Node* next; } Node; // 定义结构体 typedef struct Stack{ Node* top; int size; } Stack; // 初始化 void initStack(Stack* s){ s->top = NULL; s->size = 0; } // 判断是否为 int isEmpty(Stack* s){ return s->size == 0; } // 入操作 void push(Stack* s, int data){ Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = data; newNode->next = s->top; s->top = newNode; s->size++; } // 出操作 int pop(Stack* s){ if(isEmpty(s)){ printf(",无法出"); return -1; } int data = s->top->data; Node* temp = s->top; s->top = s->top->next; free(temp); s->size--; return data; } // 获取顶元素 int peek(Stack* s){ if(isEmpty(s)){ printf(",无法获取顶元素"); return -1; } return s->top->data; } int main(){ Stack s; initStack(&s); push(&s, 1); push(&s, 2); push(&s, 3); printf("顶元素为:%d\n", peek(&s)); printf("出元素为:%d\n", pop(&s)); printf("出元素为:%d\n", pop(&s)); printf("出元素为:%d\n", pop(&s)); printf("是否为:%d\n", isEmpty(&s)); return 0; } ``` 在上面的代码中,我们使用了链表实现。在的初始化函数中,我们将顶指针置为 NULL,并将的大小设为 0。在入操作时,我们创建一个新的链表结点,将其插入到链表的头部,并将顶指针指向该结点。在出操作时,我们首先判断是否为,如果为则输出错误信息;否则,我们取出顶元素,并将顶指针指向下一个结点。在获取顶元素时,我们同样需要判断是否为

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值