1. 程式人生 > >全是bug的程式設計師_秦時小

全是bug的程式設計師_秦時小


                /* 1 棧的順序結構實現 */

#include <stdio.h>
#include <stdbool.h>

typedef int TYPE;  //定義棧元素型別
#define SIZE 5    //棧空間大小

//宣告順序棧結構體
typedef struct
{
    TYPE data[SIZE];//記錄棧中元素值
    int length;     //記錄棧的長度
}seqStack;


void init(seqStack*);//初始化

void push(seqStack*,TYPE);//入棧

TYPE pop(seqStack*);//出棧
void clear(seqStack*);//清空 bool isEmpty(seqStack*);//判斷棧是否為空 bool isFull(seqStack*);//判斷棧是否已滿 int length(seqStack);//返回棧的大小 void ergodic(seqStack*);//遍歷棧中元素 int search(seqStack*,TYPE);//搜尋,返回是第幾個元素,失敗則返回-1 int main() { seqStack nodes; //棧初始化 init(&nodes); //元素入棧 printf("輸入要入棧的元素個數:"
); int count = 0; scanf("%d",&count); TYPE elem; printf("輸入%d個入棧元素:",count); if(count<=SIZE-length(nodes)) { while(count) { scanf("%d",&elem); push(&nodes,elem); count--; } } else { printf
("\n輸入資料過多或者棧已滿,入棧失敗\n"); } //元素出棧 if(!isEmpty(&nodes)) printf("出棧元素是:%d\n",pop(&nodes)); else printf("棧已空,出棧失敗!\n"); //搜尋元素 printf("輸入要搜尋的元素:"); scanf("%d",&elem); int number = search(&nodes,elem); if(number>0) printf("找到元素%d是第%d個元素\n",elem,number); else printf("元素%d不存在\n",elem); //遍歷棧 printf("遍歷棧:"); ergodic(&nodes); //清空棧 clear(&nodes); printf("清空後遍歷:"); ergodic(&nodes); return 0; } //棧初始化 void init(seqStack* stack) { stack->length = 0; } //入棧操作 void push(seqStack* stack,TYPE e) { if(!isFull(stack)) { stack->data[stack->length] = e; stack->length++; } //判斷上面最後一個元素插入後,棧滿則清空緩衝區 //不能用else分支,必須用isFull再判斷一次 if(isFull(stack)) { scanf("%*[^\n]"); scanf("%*c"); } } //出棧操作 TYPE pop(seqStack* stack) { stack->length--; return stack->data[stack->length]; } //判斷是否為空 bool isEmpty(seqStack* stack) { return stack->length==0; } //判斷是否為滿 bool isFull(seqStack* stack) { return stack->length>=SIZE; } //返回棧的長度 int length(seqStack stack) { return stack.length; } //遍歷棧 void ergodic(seqStack* stack) { for(int i=0;i<stack->length;i++) printf("%d ",stack->data[i]); printf("\n"); } //搜尋棧中元素,返回元素首次在棧中出現的位置 int search(seqStack* stack,TYPE e) { int pos=0; for(int i=0;i<stack->length;i++) { if(stack->data[i]==e) { pos=i+1; break; } } return pos; } //清空棧 void clear(seqStack* stack) { stack->length = 0; }