Wallets
A wallet is an application that manages your keys and can create transactions. There are many open source and closed source wallet applications for different platforms (Desktop, Mobile, custom Hardware Wallets). Bitcoin-core has an implementation that runs on a full node. See Bitcoin Wiki - Wallet.
Accounts
An account can have different meanings depending on the wallet application you are using, but in bitcoin core it is a way to give a readable name to an address and keep track of your balance. In bitcoin core, an account can include multiple receiving addresses. See Bitcoin Wiki - Accounts explained. Note: See @Pieter Wuille's comment below that this will be deprecated from bitcoin-core.
Addresses
An address can be a form of your public key (or a script), to which people can send bitcoin, and which can only be spent by the corresponding private key (or by satisfying the script). There are many forms your address can take, because it can be derived from any valid script. A simple P2PKH
(Pay to public key hash) address is the RIPEMD160(SHA256(public key))
encoded using Base58 checksum. A P2SH
is a hash of a script. Basically, in order to spend coins sent to any address, one must satisfy the script that address represents, which usually includes providing the script (P2SH
) that the address was hashed from, and any required signatures. See Bitcoin Wiki - Address