首页 > 其他 > 详细

栈和队列(不定时更新)

时间:2014-03-12 03:59:23      阅读:496      评论:0      收藏:0      [点我收藏+]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<br><br>栈的创建,入栈,打印栈内数据<br>#include <stdio.h>
#include <stdlib.h>
 
typedef int StackElementType;
 
typedef struct node
{
StackElementType data;
struct node *next;
}LinkStackNode;
 
typedef LinkStackNode *LinkStack;
 
void InitStack(LinkStack *s)
{
*s = (LinkStack)malloc(sizeof(LinkStackNode));
LinkStack s1 = *s;
s1->data = -1;
s1->next = NULL;
}
 
void push(LinkStack *s)
{
int x;
LinkStack s1;
LinkStack s2 = *s;
if(s2->next == NULL)
{
s1 = (LinkStackNode *)malloc(sizeof(LinkStackNode));
scanf("%d", &x);
 
if(x == -1)
{
free(s1);
return;
}
s1->data = x;
s1->next = NULL;
s2->next = s1;
}
 
while(1)
{
s1 = (LinkStackNode *)malloc(sizeof(LinkStackNode));
scanf("%d", &x);
 
if(x == -1)
{
free(s1);
return;
}
s1->data = x;
s1->next = s2->next;
s2->next = s1;
}
 
}
 
void print(LinkStack *s)
{
LinkStack s1 = *s;
s1 = s1->next;
 
while(s1 != NULL)
{
printf("%d ", s1->data);
s1 = s1->next;
}
}
 
int main()
{
LinkStack s;
InitStack(&s);
push(&s);
print(&s);
}

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//创建队列并且进行初始化<br>#include <stdio.h>
#include <stdlib.h>
 
typedef int QueueElementType;
 
typedef struct Node
{
    QueueElementType data;
    struct Node *next;
}LinkQueueNode;
 
typedef struct
{
    LinkQueueNode *front;
    LinkQueueNode *rear;
}LinkQueue;
 
int initQueue(LinkQueue *q)
{
    int x;
    LinkQueue *q2 = q;
    LinkQueueNode *q3;
    LinkQueueNode * q1 = (LinkQueueNode *)malloc(sizeof(LinkQueueNode));
    scanf("%d", &x);
    if(x == -1)
    {
        (q)->front = NULL;
        (q)->rear = NULL;
    }
    q1->data = x;
    q1->next = NULL;
    q2->front = q1;
    q2->rear = q1;
 
    while(1)
    {
        scanf("%d", &x);
 
        if(x == -1)
            return;
 
        q3 = (LinkQueueNode *)malloc(sizeof(LinkQueueNode));
        q3->data = x;
        q1->next = q3;
        q1 = q1->next;
        q3->next = NULL;
        (q)->rear = q3;
        printf("aaaa  ");
    }
}
 
void print(LinkQueue *q)
{
    LinkQueueNode *q1 = q->front;
    for(; q1 != NULL; q1 = q1->next)
    {
        printf("%d", q1->data);
    }
 
    return ;
}
 
int main()
{
    LinkQueue q;
    initQueue(&q);
//  enterQueue(&q);
    print(&q);
}

栈区(stack区):由编译器创建和释放,存放函数的参数值,局部变量值,起操作方式类似于数据结构中的栈。

堆区(heap):由程序员创建和释放,若程序员不释放,则由操作系统收回。

全局区:全局变量和静态变量是存储在一起的。

 

栈:只要剩余栈的空间大于申请栈的空间,系统则为程序提供内存,否则,将报异常栈溢出。

堆:操作系统有一个记录空闲内存地址的链表,当系统收到程序申请时,会遍历该链表,寻找第一个空间大于所申请的堆节点,然后将该节点从堆节点中删除,并将该节点分配给程序,大多数操作系统会在这块内存空间的首地址记录本次分配的大小,这样代码的delete 语句才能正确的释放本内存空间。

 

栈和队列(不定时更新),布布扣,bubuko.com

栈和队列(不定时更新)

原文:http://www.cnblogs.com/xiongge/p/3594381.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!