棧和佇列面試題(C語言版)

2021-08-23 12:21:58 字數 1486 閱讀 5292

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...