1.线性表

1.顺序表

typedef struct{
	int data[maxSize];
	int length;
}Sqlist;

2.单链表

typedef struct LNode{
	int data;
	struct DLNode *next;
}LNode;

3.双链表

typedef struct DLNode{
	int data;
	struct DLNode *prior;
	struct DLNode *next;
}DLNode;

2.栈和队列

1.顺序栈

int stack[maxSize];
int top=-1;
进栈:stack[++top]=x;
出栈:x=stack[top--];

2.链栈

typedef struct LNode{
	int data;
	struct LNode *next;
}lst;
栈空: lst->next==NULL; 
进栈: p->next=lst->next; lst->next=p;
出栈: p=lst->next; x=p->data; lst->next=p->next; free(p);

3.顺序队列

typedef struct{
	int data[maxSize];
	int front,reat;
}SeQueue;
进队:qu.rear=(qu.rear+1)%maxsize; qu.data[qu.rear]=x;
出队:qu.front=(qu.front+1)%maxsize; x=qu.data[qu.front];
判空:qu.rear==qu.front;

4.链队

typedef	struct QNode{
	int data;
	struct QNode *next;
}QNode;
typedef struct{
	QNode *front;
	QNode *rear;
}LiQueue;
队空:lqu->rear==NULL 或者 lqu->front==NULL
进队: lqu->rear->next=p;lqu->rear=p;
出队:p=lqu->front;lqu->front=p->next;x=p->data;free(p);

3.树与二叉树

1.二叉链表

typedef struct BTNode
{
	char data;
	struct BTNode *lchild;
	stryct BTNode *rchild;
}BTNode;

2.先序遍历

void preorder(BTNode *p)
{
	if(p!=NULL)
	{
		visit(p); //1.前
		preorder(p->lchild);
		//2.中
		preorder(p->rchild);
		//3.后
	}
}

3.中缀表达式求值问题

int comp(BTNode *p)
{
	int A,B;
	if(p!=NULL)	
	{
		if(p->lchild!=NULL&&p->rchild!=NULL)
		{
			A=comp(p->lchild);
			B=comp(p->rchild);
			return op(A,B,p->data);
		}
		else	return p->data-'0';
	}
	else return 0;
}

4.求二叉树的深度

int getDepth(BTNode *p)
{
	int LD,RD;
	if(!p)	return 0;
	else
	{
		LD=getDepth(p->lchild);
		RD=getDepth(p->rchild);
		return (LD>RD?LD:RD)+1;
	}
}

5.先序遍历第K个值

int n=0;
void trave(BTNode *p,int k)
{
	if(p!=NULL)
	{
		++n;
		if(k==n)	{cout<<p->data<<endl; return ;}
		trave(p->lchild,k);
		trave(p->rchild,k);
	}
}

6.层序遍历

void level(BTNode *p)
{
	int front,rear;
	BTNode *que[maxSize];
	front=rear=0;
	BTNode *q;
	if(p!=NULL)
	{
		rear=(rear+1)%maxSize;
		que[rear]=p;
		while(front!=rear)
		{
			front=(front+1)%maxSize;
			q=que[front];
			visit(q);
			if(q->lchild!=NULL)	{rear=(rear+1)%maxSize;que[rear]=q->lchild;}
			if(q->rchild!=NULL)	{rear=(rear+1)%maxSize;que[rear]=q->rchild;}
		}
	}
}

7.先序非递归

void preorder(BTNode *bt)
{
	if(!bt)
	{
		BTNode *Stack[maxSize];
		int top=-1;
		BTNode *p;
		Stack[++top]=bt;
		while(top!=-1)
		{
			p=Stack[top--];
			visit(p);
			if(p->rchild!=NULL)	Stack[++top]=p->rchild;
			if(p->lchild!=NULL)	Stack[++top]=p->lchild;
		}
	}

8.中序非递归

1.根结点入栈
2.循环执行,若栈顶左存在,则左入栈;若不存在则输出栈顶并检查右,如右存在则右入栈
3.栈空时结束

9.后序非递归

void preorder(BTNode *bt)
{
	if(!bt)
	{
		BTNode *Stack1[maxSize],*Stack2[maxSize];
		int top1=-1,top2=-1;
		BTNode *p;
		Stack1[++top]=bt;
		while(top1!=-1)
		{
			p=Stack1[top--];
			Stack2[++top2];
			visit(p);
			if(p->lchild!=NULL)	Stack1[++top]=p->lchild;
			if(p->rchild!=NULL)	Stack1[++top]=p->rchild;
		}
	}
	while(top2!=-1)
	{
		p=Stack[top2--];
		visit(p);
	}
}

4.图

typedef struct
{
	int edges[maxSize][maxSize];
	int n,e;
	VertexType vex[maxSize];
}MGraph;