您的位置:首页 > 理论基础 > 数据结构算法

《算法导论》第十章----基本数据结构

2013-10-20 11:49 323 查看
《算法导论》学习记录目录

基本的数据结构是很基础的东西,而且运行时间也很容易看出来,所以本文也是简单地提及一些性质,主要还是通过一些练习来熟悉它们的性质。

(PS:无聊翻开TAOCP的第一卷,发现第二章也是讲一些数据结构,而且讲得很详细。如果明年年初计划可以完成,就应该开始看TAOCP,继续努力吧!)



栈是先进后出(后进先出),就好像洗盘子的时候,你最先放的盘子在最底,下次拿出来洗,就是最后才拿出来。(例子举得有点搓。。。)

具体操作为进栈、出栈(也叫压入、弹出)。

因为是基于数组来实现栈,所以不仅仅要注意下溢(空栈出栈),还要注意上溢(满栈进栈)。

#include <stdio.h>
#include <stdlib.h>

typedef struct ListNode{
int value;
struct ListNode * next;
}ListNode;

typedef struct {
ListNode * top;
}Stack;

void list_insert(ListNode *l , int x);

void print_list(ListNode *l);

int stack_empty(Stack *S);

void push(Stack *S, int x);

int pop(Stack *S);

int main(){
int i, num;
Stack * S;
S = (Stack *)malloc(sizeof(Stack));
S->top = (ListNode *)malloc(sizeof(ListNode));

for(i = 1; i <= 5; i++){
scanf("%d", &num);
push(S, num);
}

//printf("%d\n", stack_empty(S));
//print_list(S->top);

for(i = 1; i<= 5; i++)
printf("%d ", pop(S));
printf("\n");

return 0;
}

void list_insert(ListNode *l, int x){
ListNode * p;
p = (ListNode *)malloc(sizeof(ListNode));
p->value = x;
if(l->next == NULL){
l->next = p;
p->next = NULL;
}
else{
p->next = l->next;
}
l->next = p;
}

void print_list(ListNode *l){
ListNode * p = l->next;
while(p != NULL){
printf("%d ", p->value);
p = p->next;
}
printf("\n");
}

int stack_empty(Stack *S){
if(S->top->next == NULL)
return 1;
else
return 0;
}

void push(Stack *S, int x){
list_insert(S->top, x);
}

int pop(Stack *S){
if(stack_empty(S)){
printf("underflow\n");
return ;
}
else{
ListNode *p = S->top->next;
int x = p->value;
S->top->next = p->next;
free(p);
return x;
}
}


View Code

PS:还有一些练习没完成。。完成会不定期更新。。。。

还要继续努力,朝着目标进发!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: