码迷,mamicode.com
首页 > 其他好文 > 详细

栈的基本操作(链表)

时间:2021-06-11 18:10:14      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:结构体   style   表的操作   erro   define   typedef   its   alt   node   

栈的链表的操作和线性表的链式存储结构差不多。

我们用图来形象表达一下

线性表的顺序存储结构:

技术图片

 

 

链栈:

技术图片

 

 

链栈的基本操作有栈的初始化、插入数据、删除数据、遍历栈

对应的代码为:

//栈的初始化
int InitStack(Stack *stack){
    stack->top=stack->bottom=NULL;
    stack->stack_size=SIZE;
    return OK;
}
//插入数据
int Push(Stack *stack){
    int data;
    Node *newNode=(Node *)malloc(sizeof(Node));
    newNode->next=stack->top;
    stack->top=newNode;
    printf("请输入要插入的元素的值:");
    scanf("%d",&data);
    stack->top->data=data;
    return OK;
}
//删除数据
int Pop(Stack *stack){
    Node *p;
    printf("%d",stack->top->data);
    p=stack->top->next;
    free(stack->top);
    stack->top=p;
    return OK;
}
//遍历栈
int print(Stack *stack){
    while(stack->top!=NULL){
        printf("%d",stack->top->data);
        stack->top=stack->top->next;
    }
    return OK;
}

这里的结构体要定义两个,一个用来创建栈,一个用来创建结点。对应的代码为:

//创建结点
typedef struct Node{
    int data;
    struct Node *next;
}Node;
//创建栈
typedef struct Stack{
    Node *top;
    Node *bottom;
    int stack_size;
}Stack;

完整代码为:

 1 #define OK 1
 2 #define ERROR 0
 3 #define SIZE 100
 4 typedef struct Node{
 5     int data;
 6     struct Node *next;
 7 }Node;
 8 typedef struct Stack{
 9     Node *top;
10     Node *bottom;
11     int stack_size;
12 }Stack;
13 //栈的初始化
14 int InitStack(Stack *stack){
15     stack->top=stack->bottom=NULL;
16     stack->stack_size=SIZE;
17     return OK;
18 }
19 //插入数据
20 int Push(Stack *stack){
21     int data;
22     Node *newNode=(Node *)malloc(sizeof(Node));
23     newNode->next=stack->top;
24     stack->top=newNode;
25     printf("请输入要插入的元素的值:");
26     scanf("%d",&data);
27     stack->top->data=data;
28     return OK;
29 }
30 //删除数据
31 int Pop(Stack *stack){
32     Node *p;
33     printf("%d",stack->top->data);
34     p=stack->top->next;
35     free(stack->top);
36     stack->top=p;
37     return OK;
38 }
39 //遍历栈
40 int print(Stack *stack){
41     while(stack->top!=NULL){
42         printf("%d",stack->top->data);
43         stack->top=stack->top->next;
44     }
45     return OK;
46 }
47 int main()
48 {
49     Stack a;
50     InitStack(&a);
51     Push(&a);
52     Push(&a);
53     printf("删除的元素是:");
54     Pop(&a);
55     printf("剩余的元素为:");
56     print(&a);
57     return 0;
58 }

运行结果为:

技术图片

 

栈的基本操作(链表)

标签:结构体   style   表的操作   erro   define   typedef   its   alt   node   

原文地址:https://www.cnblogs.com/Jack-son/p/14872800.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!