I think, you must not accept not understanding these things, because they are really fundamental. That being said, your not understanding them is nothing to feel bad about.
You can explain a linked list to a child. So if your teacher failed to explain them to you, it is as much their fault. So you shouldn't spend time worrying, but rather try to find people, who can explain it to you. Often a fellow student is a far better teacher than a full-time academic.
Think of Trains
Imagine, you have a set of railway carriages, where each carriage has enough capacity, to contain one piece of data. Each carriage has some sort of hook at it's end, which can be attached to another carriage's front.
This in fact gives you a linked list:
- the empty list: the train containing no carriages (and therefore carrying no data)
- adding an element: add a new carriage containing the element in front of the train and hook it to the rest of the train
- removing an element: find the carriage containing the element. Remove it (you might need a crane here :)), hook the carriage before with the carriage after.
- replacing an element: find the carriage containing the old element. Exchange the old element with the new element.
- inserting an element right after another: find the carriage containing the element after which you want to insert. Insert a new carriage after it, which is hooked accordingly (we don't want the train to fall apart) and put the the new element into it.
In contrast to that, you could think of an array as a train with a given number of carriages, that cannot be rearranged in any way. All you can do is to change the data within them. This model also explains a lot of the problems arrays have:
- If you want to insert one element before another, you will have to move all the following elements to the next carriage.
- If you want to remove one element, you will need to move all the following elements one carriage to the front.
- If you need a train with more carriages, you will have to construct a new one, because you can't just prepend a carriage.
On the other hand, finding carriages in an array is much easier, because you can simply number them permanently (their order will never change).
As for the stack: A "stack" is less a data structure, than an idea. The idea of the stack is, that it acts much like a stack of books. You can only put books on top of the stack and you can only ever take the top book off the stack (at least if the books are sufficiently heavy).
That being said, a linked list can be used as a stack, if you think of the data in the carriages as books, and the book in the first most carriage as the top of the stack.
So I hope this helped you. Maybe it didn't. Maybe you're more of a visual type. In that case, I suggest you find somebody, who's good at giving visual explanations and explain it to you. It won't take long, but it will absolutely be worth it.
It's ok to struggle with this now. But merely accepting it, is not an option in the long run.