資料結構(棧子系統:c實現)
阿新 • • 發佈:2019-01-28
#include<stdio.h> #include<stdlib.h> #define N sizeof(stacknode)//結點所佔位元組數 N //定義結構體 typedef int datatype; typedef struct stacknode { datatype data; struct stacknode *next; }stacknode; //定義棧頂 typedef struct { stacknode *top; int count;//計數用 }linkstack; //進棧,元素一一進棧 void InsertStack(linkstack *s) { int x=0; stacknode *p; s->top=NULL; s->count=0; //printf("\n\t建立一個棧子系統"); p=(stacknode*)malloc(N); printf("\n\t\t請逐個輸入數字,結束標記位,做結束符的數字: 0 \n"); while(1) { /*printf("\t\t請輸入:"); fflush(stdin); if(!scanf("%d",&x)) { printf("輸入的元素種類錯誤!!!\n"); continue; } else if(x=='#') break; else { p->data=x; p->next=s->top; s->top=p; s->count++; } */ printf("\t\t請輸入:"); p=(stacknode*)malloc(N); fflush(stdin); if(!scanf("%d",&x)) { printf("\t\t\t輸入的“元素“種類錯誤!!!\n"); continue; } else if(x==0) break; else { p->data=x; p->next=s->top; s->top=p; s->count++; } } printf("\n"); } //顯示棧中元素 void ShowStack(linkstack *s) { stacknode *p; int i=0; p=s->top; i=s->count; //p->data=s->top->data; //if(p->next==NULL) if(i==0) printf("\t\t棧是一個空棧!!!!\n"); else { printf("\t棧中各個元素為:\t"); while(i!=0) { printf("%8d",p->data); p=p->next; //s->top=s->top->next; i--; } } printf("\n"); } //求棧中元素的個數 void LengthStack(linkstack *s) { printf("\t棧中元素的個數為:\t"); printf("%d",s->count); } //出棧,棧中各個元素的出棧 void PutStack(linkstack *s) { //int x; stacknode *p; //linkstack *i; if(s->count==0) { printf("\t\t棧是一個空棧!!!!"); // return 0; } else { /* p=s->top; x=p->data; s->top=p->next; free(p); //s->count-=1; */ p=s->top; s->top=s->top->next; printf("\n\t\t\t\t出棧元素為: %d\n",p->data); free(p); s->count--; } } //數制轉換,十進位制轉換為二進位制 void ShiftStack(linkstack *s) { int z=0; int m=0; stacknode *p; printf("請輸入所要轉換的 ”數字“ Z:\t"); scanf("%d",&z); s->top=NULL; while(z) { m=z%2; z=z/2; p=(stacknode*)malloc(N); p->next=s->top; s->top=p; s->top->data=m; } printf("\n\t轉化後的二進位制為\t"); while(s->top) { p=s->top; printf("%d",p->data); s->top=s->top->next; free(p); } printf("\n"); } int main() { int a; linkstack s; s.count=0; //linkstack *s; while(1) { printf(" \n\t\t\t\t\t\t棧子系統\n"); printf(" \t\t***************************************************\n"); printf(" \t\t* 1------進 棧 *\n"); printf(" \t\t* 2------出 棧 *\n"); printf(" \t\t* 3------顯示棧中元素 *\n"); printf(" \t\t* 4------求棧中元素個數 *\n"); printf(" \t\t* 5------數制轉換 *\n"); printf(" \t\t* 0------返 回 *\n"); printf(" \t\t***************************************************\n"); printf(" 請輸入(0-5)選項:\n"); printf("\n請輸入所要達到第幾號功能:\t"); fflush(stdin); scanf("%d",&a); if(a == 1) InsertStack(&s); else if(a == 2) PutStack(&s); else if(a == 3) ShowStack(&s); else if(a == 4) LengthStack(&s); else if(a == 5) ShiftStack(&s); else if(a == 0) return 0; else{ printf("!!!!!輸入有誤,請重新輸入!!!!!\n"); } } }