大话数据结构笔记————栈和队列

栈:是限定仅在表尾进行插入和删除操作的线性表。

栈的顺序存储结构

typedef int SElemType;
typedef struct {
 SElemType data[MAXSIZE];
 int top;
}SqStack;

进栈

Status Push(SqStack *S,SElemType e) {
  if(S->top == MAXSIZE -1) {
    return ERROR;
 }
 S->top++;
 S->data[S->top]=e;
 return OK;
}

出栈

Status Pop(SqStack *S,SElemType *e) {
  if(S->top == -1)
   return ERROR;
  *e=S->data[S->top];
  S->top--;
  return OK;
}

栈的链式存储结构

typedef struct StackNode {
 SElemType data;
 struct StacktNode *next;
}StackNode,*LinkStackPtr;

typedef struct LinkStack {
 LinkStackPtr top;
 int count;
}LinkStack;

进栈

Status Push(LinkStack *S,SElemType e) {
  LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode));
 s->data=e;
 s->next=S->top;
 S->top=s;
 S->count++;
 return OK;
}

出栈

Status Pop(LinkStack *S,SElemType *e) {
 LinkStackPtr p;
 if(StackEmpty(*S))
   return ERROR;
 *e=S->top->data;
 p=S->top;
 S->top=S->top->next;
 free(p);
 S->count--;
 return OK;
}

斐波那契数列

int Fbi(int i) {
 if(i<2)
  return i==0?0:1
 return Fbi(i-1)+Fbi(i-2);
}

int main() {for(int i=0;i<40;i++)
   printf("%d",Fbi(i));
 return 0;
}

 

队列:是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。

循坏队列:头尾相接的顺序存储结构的队列。

front==rear,队列为空;

(rear+1)&QueueSize == front,队列为满。

typedef struct {
  QElemType data[MAXSIZE];
  int front;
  int rear;
}SqQueue;

入队:Q->rear=(Q->rear+1)%MAXSIZE;

出队:  Q->front=(Q->front+1)%MAXSIZE;

 

队列的链式存储结构

typedef struct QNode {
  QElemType data;
  struct QNode *next;
}QNode,*QueuePtr;

typedef struct {
  QueuePtr front,rear;
}LinkQueue;

初始化

Status InitQueue(LinkQueue *q) {
    q->front = q->rear = (QueuePtr)malloc(sizeof(QNode));
if(!Q->front)
exit(OVERFLOW); q
->front->next = 0;
return OK; }

入队

Status EnQueue(LinkQueue *Q,QElemType e) {
  QueuePtr s =(QueuePtr)malloc(sizeof(QNode));
  if(!s)
    exit(OVERFLOW);
  s->data=e;
  s->next=NULL;
  Q->rear->next=s;
  Q->rear=s;
  return OK;
}

出队

Status DeQueue(LinkQueue *Q,QElemType *e) {
  QueuePtr p;
  if(Q->front ==Q->rear)
    return ERROR;
  p=Q->front->next;
  *e=p->data;
  Q->front->next=p-next;
  if(Q->rear==p)
    Q->rear=Q->front;
  free(p);
  return OK;
}

 

posted @ 2018-09-19 17:18  kyun  阅读(140)  评论(0编辑  收藏  举报