1. 程式人生 > >【資料結構】棧的儲存結構(二)雙端棧

【資料結構】棧的儲存結構(二)雙端棧

雙端棧

  • 雙端棧是為了更有效的利用棧的空間而產生的。
  • 雙端棧是一種特殊的順序棧。
  • 雙端棧適用於一組互補的資料。
  • 雙端棧兩端為底,2個整形表示棧頂指標。

程式碼收穫

  • 主要還是弄清雙端棧的結構。

棧的歸檔

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
//雙端棧需要有2個棧頂指標  底在2端
typedef struct stack{
	char data[MAXSIZE];
	int  top[2];
}stack,*stackp; 
//這樣一個底在0處,一個底在maxsize-1處 
//初始化需要把2個top至於2底端
void InitialStack(stackp *ST){ *ST=(stackp)malloc(sizeof(stack)); (*ST)->top[0]=-1; (*ST)->top[1]=MAXSIZE; } //入棧 帶選擇 int PushStack(stackp ST){ printf("輸入需要插入0號棧或1號棧\n"); int num; scanf("%d",&num); getchar(); if(num==0){ printf("輸入要插入的元素,$結束\n"); int flag1 = 1; while(flag1){ char
c1; c1 = getchar(); if(c1!='$'){ if((ST->top[0])+1==ST->top[1]){//指標位置重合表示棧滿 printf("棧滿\n"); return 1; }else{ ST->data[ST->top[0]+1]=c1; ST->top[0]++; } }else{ flag1 =0; } }getchar(); }else if(num==1){ printf("輸入要插入的元素,$結束\n"); int flag2 =
1; while(flag2){ char c2; c2 =getchar(); if(c2!='$'){ if((ST->top[1])-1==ST->top[0]){//指標位置重合表示棧滿 printf("棧滿\n"); return 1; }else{ ST->data[ST->top[1]-1]=c2; ST->top[1]--; } }else{ flag2 =0; } }getchar(); }return 0; } void PrintStack(stackp ST){ printf("雙端棧一端為\n"); int i = 0; for(;i<=ST->top[0];i++){ printf("%c",ST->data[i]); } printf("\n另一端為\n"); int p=MAXSIZE-1; for(;p>=ST->top[1];p--){ printf("%c",ST->data[p]); } } int PopStack(stackp ST){ printf("選擇棧0和1哪個出棧?\n"); int num; scanf("%d",&num); getchar(); if(num==0){ if(ST->top[0]==-1){ printf("已經空了\n"); }else{ ST->top[0]--; } }else if(num==1){ if(ST->top[1]==MAXSIZE){ printf("已經空了\n"); }else{ ST->top[1]++; } }PrintStack(ST); } void main(){ stackp ST; InitialStack(&ST); PushStack(ST); PrintStack(ST); PushStack(ST); PrintStack(ST); PopStack(ST); }