The types of queues that you mention are describing different aspects of queues.
First of all, frames are placed within a queue whenever there is congestion on the specific port. If there is none, frames are sent or recieved immedately and no queues are used. Once there is congestion, queues are employed to give priority to some frames over others. These queues can be implemented on both incomming traffic on a port as well as outgoing traffic. Now for the terms:
The first two have to do with the direction of travel of the frames:
An ingress queue is a queue in which frames are placed when coming into a port.
An egress queue is a queue in which frames are placed when going out of a port.
The next two have to do with the method of implementation:
A software queue is one that is configured and implementing using software and uses shared resources such as CPU and RAM. This is much slower.
A hardware queue is one that is configured within hardware, uses dedicated resources and thus does not need additional CPU and memory resources to function. This is much faster.
Both ingress and egress queues can be hardware or software implemented.
The strict queue has to do with the method of prioritization. A strict queue is one where the network devices service packets as soon as they arrive, or in other words, in strict priority fashion. This is useful for voice packets.
I hope this has been helpful!