23王道——第三章

文章目录

        • 队列
        • 栈和队列的应用、特殊数组

顺序栈
就直接敲了,不管格式了

不同的出栈顺序共1/(n+1) * C n 2n

//top指向栈顶元素所在位置
typedef struct{
	int data[MAXSIZE];
	int TOP;
}SqStack;
int data[MAXSIZE];
TOP=-1;

if(TOP==MAXSIZE-1)
S.data[++TOP]=e;

if(TOP==-1)
S.data[TOP--]=x;

if(TOP==-1)
S.data[TOP]=x;

栈和队列的话,都是线性结构,属于逻辑结构相同

在关于出栈顺序的选择题时,可以重点关注一下最后一个出栈的元素&&第一个出栈的元素

毕竟我懂,嘿嘿嘿

链栈

typedef struct Linknode{
	int data;
	struct Linknode *next;
}*LiStack;
//带头结点
S=new Linknode;
S->next=NULL;

Linknode *p=new Linknode;
p->data=e;
r->next=p
r=p;
r->next=NULL;

if(S->next==NULL)
x=S->next->data;
Linknode *p=S->next;
S=S->next;
delete p;

x=S->next->data;

//带头结点
S=NULL;

Linknode *p=new Linknode;
p->data=x;
//第一个元素S=p;
r->next=p;
r=p;
r->next=NULL;

队列

顺序队列

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

循环队列
区分判空和判满的条件

①牺牲一个空间
②设立辅助位size
③设立标志位tag

与rear指向位置的结合

①指向队尾元素
②指向队尾元素的下一位置

链队列

typedef struct Linknode{
	int data;
	struct Linknode *next;
}Linknode;

typedef struct{
	Linknode *front,*rear;
}LiQueue;

双端队列

输出受限和输入受限队列

课后14题确实,循环单链表,记得找最后一个的尾指针

栈和队列的应用、特殊数组

前,中,后缀表达式

后缀求值,用到的是数栈,见一符号弹二数,再加入
前缀转后缀,用符栈,数加入,符号优先级,()
前缀求值,用到数栈+符栈,将上面两条结合就可以了

栈可以用来十进制转二进制,余数进栈,倒序输出就是二进制

特殊数组的话,就是注意,下标,

B[]
0开始就去找,前面有多少个数
1开始的话就去找它是第几个数

也要注意,原数组下标是0\1开始,这个用来计算,前面有几行,用来铺垫计算,前面有多少个数字,这两个可以来回结合,注意计算

三对角矩阵的,k,以及反求i,j,向上取整
注意题目给的是具体数字的话,上三角所在行前面有多少个数的计算

你可能感兴趣的:(王道,编辑器,c语言,数据结构)