Usually the first step, if you have just raw ADC samples, is to convert to signed integers. If you know the DC offset, you can just subtract it. If the DC offset isn't precisely known, you can find it by just taking the average of many samples, or implementing a moving average algorithm. Or you could implement a high pass filter in any number of traditional ways (biquad, FIR, etc) to remove the DC and end up with signed numbers... though pretty much any approach that dynamically finds and subtracts the DC level can be considered a high pass filter.

Once you have signed data, AC voltage is a pretty simple matter of just multiplying each sample by itself, adding all those up over the period of time you want to know the voltage, and then take the square root.

Frequency is pretty easy if you have a simple waveform like a sine, square, triangle or sawtooth. Just scan through the samples and look for the number of places where you have a negative number followed by a positive number. Then divide that count by the amount of time for all the samples you analyzed to get (approximately) the frequency.

If you want to get fancy, you can look at the actual negative and positive numbers and try to estimate the sub-sample timing when the signal went from negative to positive. For example, if the samples were -25 and +200, you could assume the waveform crossed zero close the beginning of the time between those 2 samples. Maybe you do this for just the first and last pairs, so you can end up with higher resolution of the total time.

This very simple frequency algorithm can give unreliable results if you have a slowly varying waveform like a sine or triangle and also some high frequency signal or noise added. As the slow waveform crosses from negative to positive, you can end up counting several crossings if the high frequency component causes the signal to cross back and forth more than once. The simple way to deal with this is hysteresis, where you set a threshold slightly below zero to consider the signal negative and slightly above zero to consider it positive.

But if you have a very complicated signal with a lot of harmonics (like the sound of a tuba or other large horn instrument) or a lot of higher frequencies mixed in (like the sound of most plucked string instruments), then simple analysis almost never gives good results. Very advanced analysis like the YIN algorithm is needed to find the fundamental frequency for those really complicated sounds.