Вы можете сделать это с одним из абстрактных типов данных (например, стеком или очередью), но зачем?
Просто используйте два указателя, один в начале и один в конце, а затем поменяйте местамиони указывают на.Увеличьте начальный указатель и уменьшите конечный, затем продолжайте, пока они не встретятся или не пересекутся.
В следующем коде (псевдокод, поскольку (1) это звучит немного как домашнее задание и (2) его легко преобразовать влюбой процедурный язык), я буду считать строки в стиле C, но вы можете легко приспособиться к другим вариантам.Псевдокода, подобного следующему, будет достаточно, при условии, что у вас есть доступ к значению, address of first character
:
set pstart to address of first character
# Locate last character
set pend to pstart
while [pend] is not null:
pend = pend + 1
pend = pend - 1
# Continue until they cross
while pstart < pend:
# Swap contents
tmp = [pstart]
[pstart] = [pend]
[pend] = tmp
# Move pointers
pstart = pstart + 1
pend = pend - 1
Если вы действительно хотите использовать ADT, стека будет достаточно сследующая логика:
# Push until reached end of string
set pchar to address of first character
while [pchar] is not null:
push [pchar]
pchar = pchar + 1
# Then pop the same way (but reverse order)
set pchar to address of first character
while [pchar] is not null:
pop [pchar]
pchar = pchar + 1