Chinaunix首页 | 论坛 | 博客
  • 博客访问: 133007
  • 博文数量: 44
  • 博客积分: 956
  • 博客等级: 准尉
  • 技术积分: 521
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-18 12:45
文章分类
文章存档

2012年(11)

2011年(33)

分类: C/C++

2011-12-20 18:25:49

栈:
     栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。
数组方式:
 typedef struct{
    int data[10];
    int top;
}stack;
链表实现:
typedef struct stack{
    int data;
    struct stack *next;
}Stack, pStack;

栈操作:
创建,判断是否为空和满,清空栈,入栈,出栈,清空,销毁
链式栈不需要判断是否为满

 

队列:
     队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。
设定:front为对头的前一个的下标,rear为对尾的元素下标,
数组实现:
typedef struct {
    int data[10];
    int front;
    int rear;
}queue;

数组实现的队列,一般为循环队列,在入栈和出栈的时候要判断位置是否为数组两端,可以在对front和rear++后对数组长度取模操作。


链表实现:
typedef struct node{
    int data;
    struct node *next;
}Node, *Link;
typedef struct link{
   Link front;
   Link rear;
} lqueue, *LQueue;
队列的操作:创建一个空队列,入队,出队,,判断是否为空,是否为满(链式队列不需要),清空,销毁~注意:在链式队列中,出队操作时,可以将front所指向的头结点释放,将下一结点的值出对,然后将front指向下一节点,将该节点作为头结点,这样在形式和操作上比较同意~

阅读(1425) | 评论(0) | 转发(0) |
0

上一篇:数据结构(8)

下一篇:约瑟夫问题

给主人留下些什么吧!~~