这里栈和队列用STL库来说明一下:
stack是STL中实现的一个后进先出的容器。
清空:clear()
获取栈内元素的个数:size()
判断空:empty()
进栈:push()
出栈:pop()
取栈顶元素:top()
队列queue,在STL中则是实现了一个先进先出的容器。
清空 clear()
获取队列中的元素个数 size()
判空 empty()
入队 push() 将元素放到队尾
出队 pop() 这里是令队首元素出队
获取队首 front()
获取队尾 back()
栈和队列调用的时候主要可以直接用STL库提供的stack和queue容器,这里简单来说明一下链表:
顺序表和链表都是线性表,顺序表类似于数组 ,而链表由若干节点组成,且节点在内存中的存储位置通常是不连续的。链表的节点一般由两个部分组成,即指针域和数据域,链表的两个节点之间一般通过一个指针来从一个节点指向另一个节点。
struct node{
int data;
node * next;
};
//1、创建链表
node* create()
{
node * p,*pre,* head;
head = new node; //创建头结点
head->next = NULL: //初始创建时指针域赋值空
pre = head ;
return node;
}
//2、查找元素的个数
int search(node * head, int x)
{
int count = 0;
node* p = head->next;
while(p!=NULL)
{
if(p->data == x) { count++; }
p = p->next;
}
return count;
}
在第三个元素位置插入4,可以看到 4的前驱指向元素3所在节点,4的后继为6所在的节点
//3、将x插入到以head为头结点的链表的第pos个位置上
void insert(node * head,int pos, int x)
{
node * p = head;
for(int i = 0; i< pos -1 ; i++)
{
p = p->next;
}
node * q =new node ; //创建包含数据x的新节点
q->data = x;
q->next = p->next; //新节点指向当前节点的下一个节点
p->next = q; //当前节点指向新节点
}
删除元素6所在的节点,6的前项节点指向6的后项节点
void del(node * head ,int x)
{
node * p =head ->next ;
node * pre =head ;
while( p != NULL){
if(p->data ==x)
{
pre->next = p->next;
delete(p);
p = pre->next; //加上这一句是删除所有数据域为x的节点
}else{
pre = p;
p = p->next ;
}
}
}