1.判斷出入棧的合法性
2.使用兩個棧實現乙個佇列
思想:1.棧1中的所有資料彈到棧2中(棧2為空棧)
2.再從棧2彈出所有資料,則可出現佇列的效果
(預設壓資料壓到佇列1中,從佇列2出資料)
typedef struct stack
stack;
void stackinit(stack* p)
void stackpush(stack* p,datatype x)
else }
datatype stackpop(stack* p)
void test1(stack* s,stack* s1)
while (s1->top >= 0)
printf("\n");
} else
}
3.使用兩個佇列實現乙個棧
思想:1.先將佇列1中的元素壓入到佇列2中,在佇列1中只剩乙個元素,將剩下的乙個元素彈出
2.再將佇列2中的元素壓入佇列1中,剩最後乙個元素,彈出
3.重複上述步驟,直到佇列1中沒有元素
(如果中途需要往進再壓入元素,則壓在非空的佇列中)
typedef struct queuenode
queuenode;
typedef struct queue
queue;
queue.c
void queueinit(queue* p)
queuenode* buynode(datatype x)
void queuepush(queue* p, datatype x)
}queuenode* queuepop(queue* p)
void queuedestory(queue* p)
}void test1(queue* p, queue* p1)
printf("%d ", queuepop(p)->data);
while (p1->_head)
}printf("\n");
}
4.乙個陣列實現兩個棧
void sharestacktest3() //乙個陣列兩個棧
; stack s1;
stack s2;
int i = 0;
int j = sizeof(arr) / sizeof(arr[0]) - 1;
int capacity = j + 1;
stackinit(&s1);
stackinit(&s2);
while (s1.size < 2)
else
}print(&s1);
printf("\n");
while (s2.size < 7)
else
}print(&s2);
printf("\n");
}
棧和佇列c語言版
定義 棧是限定僅在表尾進行插入和刪除操作的線性表。我們把允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 不含任何資料元素的棧稱為空棧。棧又稱為先進後出 last in first out 的線性表,簡稱lifo結構。首先他是乙個線性表,棧元素具有線性關係,即前驅後繼關係。是一種特...
棧和佇列面試題
遞迴反轉乙個棧 void reverse stack s reverse s int tmp2 s.top s.pop reverse s s.push tmp1 reverse s s.push tmp2 遞迴排序乙個棧 void sort stack s sort s int tmp2 s.to...
棧和佇列面試題
1.使用兩個棧,實現乙個佇列。棧 先進後出,且只能從棧頂pop出資料。佇列 先進先出,對頭pop資料,隊尾push資料。如下 include template class myqueue void pop else if stack2.empty private stack stack1 stack...