程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 棧的筆記(3)--鏈棧,筆記--

棧的筆記(3)--鏈棧,筆記--

編輯:關於C語言

棧的筆記(3)--鏈棧,筆記--


鏈棧:采用鏈表作為儲存結構的棧,為操作方便,一般采用帶頭結點的單鏈表。
      鏈表的表頭指針作為棧頂指針
鏈棧的結構定義如下:
typedef struct node
{
  StackElementType data;
  stuct node *next;

}LinkStackNode;
typedef LinkStackNode *LinkStack;

鏈棧進棧操作
int Push(LinkStack top,StackElementType x)
{
  LinkStackNode *temp;
  temp=(LinkStackNode *)malloc(sizeof(LinkstackNode));
  if(temp==NULL)
   return(FALSE);//申請空間失敗
  temp->data=x;
  temp->next=top->next;
  top->next=temp;//修改當前棧頂元素
  return(TRUE);
}

鏈棧出棧操作
int Pop(LinkStack top,StackElementType *x)
{
  LinkStackNode *temp;
  temp=top->next;
  if(temp==NULL)
   return(FALSE);//棧為空
  top->next=temp->next;
  *x=temp->data;
  free(temp);//釋放存儲空間
  return(TRUE);
}

運用多個單鏈表,可以實現多個鏈棧(將多個鏈棧的棧頂指針放到一個一維指針數組中統一管理)

定義結構入如下:
#define M 10  //假設定義10個鏈棧
typedef stuct node
{
  StackElementType data;
  struct node *next;
}LinkStackNode *LinkStack;
linkStack top[M];
第i號的進棧操作
int pushi(LinkStack top[M],int i,StackElementType x)
{
  LinkStackNode *temp;
  temp=(LinkStackNode *)malloc(sizeof(LinkStackNode));
  if(temp==NULL)
   return(FALSE);
  temp->data=x;
  temp->next=top[i]->next;
  top[i]->next=temp;
  return(TRUE);
}

第i號棧元素的出棧操作
int Pop(LinkStack top[M],int i,StackElementType *x)
{
  LinkStackNode *temp;
  temp=top[i]->next;
  if(temp==NULL)
   return(FALSE);
  top[i]->next=temp->next;
  *x=temp->data;
  free(temp); //釋放存儲空間
  return(TRUE);
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved