當前位置:首頁 » 編程語言 » c語言輸出棧的長度
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言輸出棧的長度

發布時間: 2022-06-03 03:52:03

❶ 請問一下c語言關於棧的基本應用

#include <stdlib.h>

010 #include <malloc.h>

011 #include <memory.h>

012 #include <assert.h>
/*------------------------------------------------------------

12 // 棧結構的定義

13 ------------------------------------------------------------*/

14 typedef struct Stack

15 {

16 ElemType *base; // 棧基址

17 ElemType *top; // 棧頂

18 int stacksize; // 棧存儲空間的尺寸

19 } SqStack;

20

21 /*------------------------------------------------------------

22 // 棧的基本操作

23 ------------------------------------------------------------*/

24

25 bool InitStack(SqStack *S);

26 void DestroyStack(SqStack *S);

27 bool StackEmpty(SqStack S);

28 int StackLength(SqStack S);

29 bool GetTop(SqStack S, ElemType *e);

30 void StackTraverse(SqStack S, void (*fp)(ElemType));

31 bool Push(SqStack *S, ElemType e);

32 bool Pop(SqStack *S, ElemType *e);

33 bool bracketMatch(SqStack *S,const char *arr);

const int STACK_INIT_SIZE = 100; // 初始分配的長度

016 const int STACKINCREMENT = 10; // 分配內存的增量

017

018 /*------------------------------------------------------------

019 操作目的: 初始化棧

020 初始條件: 無

021 操作結果: 構造一個空的棧

022 函數參數:

023 SqStack *S 待初始化的棧

024 返回值:

025 bool 操作是否成功

026 ------------------------------------------------------------*/

027 bool InitStack(SqStack *S)

028 {

029 S->base = (ElemType *)malloc(STACK_INIT_SIZE *sizeof(ElemType));

030 if(S ->base == NULL)

031 return false;

032 S ->top = S ->base;

033 S->stacksize = STACK_INIT_SIZE;

034 return true;

035 }

036

037 /*------------------------------------------------------------

038 操作目的: 銷毀棧

039 初始條件: 棧S已存在

040 操作結果: 銷毀棧S

041 函數參數:

042 SqStack *S 待銷毀的棧

043 返回值:

044 無

045 ------------------------------------------------------------*/

046 void DestroyStack(SqStack *S)

047 {

048 assert(S != NULL);

049 free(S ->base);

050 S->base = S->top = NULL;

051 }

052

053 /*------------------------------------------------------------

054 操作目的: 判斷棧是否為空

055 初始條件: 棧S已存在

056 操作結果: 若S為空棧,則返回true,否則返回false

057 函數參數:

058 SqStack S 待判斷的棧

059 返回值:

060 bool 是否為空

061 ------------------------------------------------------------*/

062 bool StackEmpty(SqStack S)

063 {

064 assert((S.base != NULL)&&(S.top != NULL));

065 return (S.base == S.top);

066 }

067

068 /*------------------------------------------------------------

069 操作目的: 得到棧的長度

070 初始條件: 棧S已存在

071 操作結果: 返回S中數據元素的個數

072 函數參數:

073 SqStack S 棧S

074 返回值:

075 int 數據元素的個數

076 ------------------------------------------------------------*/

077 int StackLength(SqStack S)

078 {

079 assert((S.base != NULL)&&(S.top != NULL));

080 return (S.top - S.base);

081 }

082

083 /*------------------------------------------------------------

084 操作目的: 得到棧頂元素

085 初始條件: 棧S已存在

086 操作結果: 用e返回棧頂元素

087 函數參數:

088 SqStack S 棧S

089 ElemType *e 棧頂元素的值

090 返回值:

091 bool 操作是否成功

092 ------------------------------------------------------------*/

093 bool GetTop(SqStack S, ElemType *e)

094 {

095 assert((S.base != NULL) && (S.top != NULL));

096 if(S.top == S.base)

097 exit(0);

098 *e = *(S.top - 1);

099 return true;

100 }

101

102 /*------------------------------------------------------------

103 操作目的: 遍歷棧

104 初始條件: 棧S已存在

105 操作結果: 依次對S的每個元素調用函數fp

106 函數參數:

107 SqStack S 棧S

108 void (*fp)() 訪問每個數據元素的函數指針

109 返回值:

110 無

111 ------------------------------------------------------------*/

112 void StackTraverse(SqStack S, void (*fp)(ElemType))

113 {

114 assert((S.base != NULL) && (S.top != NULL));

115 while(S.base < S.top)

116 {

117 (*fp)(*S.base);

118 S.base++;

119 }

120 }

121

122 /*------------------------------------------------------------

123 操作目的: 壓棧——插入元素e為新的棧頂元素

124 初始條件: 棧S已存在

125 操作結果: 插入數據元素e作為新的棧頂

126 函數參數:

127 SqStack *S 棧S

128 ElemType e 待插入的數據元素

129 返回值:

130 bool 操作是否成功

131 ------------------------------------------------------------*/

132 bool Push(SqStack *S, ElemType e)

133 {

134 if(S == NULL)

135 return false;

136 assert((S->base != NULL) && (S ->top != NULL));

137 if(S ->top - S ->base >= S->stacksize)

138 {

139 S ->base = (ElemType *)realloc(S ->base,(S ->stacksize + STACKINCREMENT) * sizeof(ElemType));

140 if(! S ->base)

141 exit(0);

142 S ->top = S->base + S ->stacksize;

143 S ->stacksize += STACKINCREMENT;

144 }

145 *(S ->top++) = e;

146 return true;

147 }

148

149 /*------------------------------------------------------------

150 操作目的: 彈棧——刪除棧頂元素

151 初始條件: 棧S已存在且非空

152 操作結果: 刪除S的棧頂元素,並用e返回其值

153 函數參數:

154 SqStack *S 棧S

155 ElemType *e 被刪除的數據元素值

156 返回值:

157 bool 操作是否成功

158 ------------------------------------------------------------*/

159 bool Pop(SqStack *S, ElemType *e)

160 {

161 if((* S).top == (*S).base)

162 return false;

163 *e = * --(* S).top;

164 return true;

165 }

❷ c語言建立棧並且輸出,數組a的長度已經定義為5,可是往棧裡面加了多少個元素都能輸出,怎麼修改

進棧的時候判斷是否棧已經滿了,如果棧已經滿了,可以重新realloc申請空間,也可以直接return結束函數,不用s.a[++s.top]=data;

❸ 棧的基本操作的實現(c語言),高手速來!!

/*程序錯誤太多*/ #include"stdio.h"
#include"stdlib.h"
#include"time.h"
#include"malloc.h"
#define
STACK_INIT_SIZE
10
//棧容量 typedef
struct
SqStack
{

int
top;
//棧頂當前指針

int
*base;
//棧空間數組
}SqStack; void
InitStack(SqStack
&S);
//構造空棧S
int
Push(SqStack
&S,int
e);
//入棧(棧地址,入棧數據)
返回0對,-1錯
int
Pop(SqStack
&S);
//出棧
(棧地址)返回棧頂數據
int
StackLength(SqStack
S);
//返回站的元素個數,即求棧長
void
Print_S(SqStack
S);
//顯示棧內數據 int
main()
{

SqStack
S;

int
i=0;

int
a,e;

InitStack(S);

srand((unsigned)time(NULL));
//srand((unsigned)time(NULL))以time函數值(當前時間)作為種子
printf("隨機填充5個元素為:
");

while(
i<5)

{

a
=
rand()%100;

printf("%d
",
a);

Push(S,a);

i++;

}
Print_S(S);

printf("請輸入要插入棧頂的元素:");

scanf("%d",&e);

Push(S,e);

Print_S(S);

printf("再彈出的棧頂元素為:%d
\n",Pop(S));

printf("棧的長度為:%d
\n",StackLength(S));

Print_S(S);

return
0;
} void
InitStack(SqStack
&S)
//構造空棧S
{

S.base
=
(int
*)malloc(STACK_INIT_SIZE
*
sizeof(int));
//分配組數空間,長度STACK_INIT_SIZE

if
(S.base==NULL)

{

printf("內存分配失敗!\n");

return;

}

S.top=-1;
} int
Push(SqStack
&S,int
e)
{

if(S.top>=STACK_INIT_SIZE)

{

printf("棧空間已滿,入棧失敗!\n");

return
-1;

}

else

{

S.base[++S.top]=e;

return
0;

}
} int
Pop(SqStack
&S)
//返回棧頂數據
{

if
(S.top>=0)
//棧內有數據

{

return
S.base[S.top--];

}

else

{

printf("空棧,無數據彈出!\n");

return
-1;

}
} int
StackLength(SqStack
S)
{

return
S.top+1;
} void
Print_S(SqStack
S)
{

printf("\n出棧顯示:");

if(S.top
==
-1)
printf("棧內無數據!\n");

else

{

while(S.top>=0
)
printf("%d
",Pop(S));

putchar('\n');

}
}

❹ 急求c語言關於堆棧的長度

找本數據結構書,都是最簡單的常式代碼,真的懶得敲一遍了

❺ 關於C語言printf函數和棧的問題

對於浮點輸出格式來說
%m.nf
其中m是輸出寬度,n是精度,f是格式化控制符
m指定的是輸出數字字元串的最小長度,比如你輸出
printf( "%2.3f" , 123.456 ); // 由於實際輸出的數字123.456共有7個字元,大於2個字元數量,所以這里的2其實實際上沒起到什麼作用,不過如果你printf( "%8.3f" , 123.456 );,8-7=1,那麼結果將在數字前面補一個空格字元,使用printf( "%08.3f" , 123.456 );則是補一個字元'0'
所以e如果存在於被輸出的數字串里的話(比如使用%e),它也是要佔用m的計數的,包括小數點。
n則是指定輸出精度,也就是小數點後保留幾位,默認不指定.n的時候printf會自動調整輸出到默認精確位,如果指定了n的話,printf則把數字保留小數點後n位輸出。
所以printf( "%f", 123.456 );如果輸出123.456000的話,那麼printf( "%.2f", 123.456 );則輸出123.46,

❻ c語言堆棧和隊列

棧(stack)又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

隊列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。

以上是從數據結構角度來看,從操作系統角度來看,所有的數據結構都是對虛擬內存的操作,堆是堆,棧是棧,棧指的是C語言函數所使用的自動有函數回收的虛擬內存空間,而堆則有操作系統堆管理器來管理的那部分虛擬內存,從C語言角度來看,使用malloc函數動態分配的內存,就是堆內存。

❼ 求編程高手用c語言編寫鏈棧完整源代碼

/****************************************************************************************
實現鏈棧各種基本運算的演算法 *
編寫程序實現鏈棧種基本運算,並在此基礎上設計一個主程序完成如下功能:
1、 初始化棧
2、 判斷棧是否為空
3、 依次進棧a,b,c,d,e元素。
4、 判斷棧是否為空
5、 輸出棧的長度
6、 輸出從棧頂到棧底元素
7、 輸出出棧序列
8、 判斷棧是否為空
9、 釋放棧/
*********************************************************************************************/
#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
#define OVERFLOW -2
#define ok 1
#define STACK_INIT_SIZE 100 //存儲空間初始分配量
#define STACKCREMENT 10 //增加分量
typedef struct{
char *base;
char *top;
int stacksize;//當前分配的空間
int lenght;
}SqStack; //Sqlist
/*********************************初始化棧*************************************/
int InitStack(SqStack &S)
{
S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));// 分配存儲空間
if(!S.base) exit(0);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
S.lenght=0;
return 1;
}
/******************************************************************************/
/********************************判斷棧是否為空******************************/
bool StackEmpty(SqStack&S){
if(S.top==S.base)return 1;
else
return 0;
}

/*****************************釋放棧********************************/
int FreeStack(SqStack&S)
{

free(S.base);
S.top=S.base;
return ok;
}

/******************************************************************/
/*********************求出棧的長度*********************************/
int StackLenth(SqStack&S){
S.lenght=S.top-S.base;
return S.lenght;
}
/******************************************************************/
/**********************入棧*****************************************/
int Push(SqStack &S,char e){
if(S.lenght>=S.stacksize){
S.base=(char*)realloc(S.base,(S.stacksize+STACKCREMENT)*sizeof(char));//增加分配存儲
if(!S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKCREMENT;
}
*S.top++=e;
S.lenght++;
return ok;
}
/**************************************************************/
/****************************出棧****************************/
char Pop(SqStack&S,char &e){
if(S.base==S.top)
return 0; //當棧為空時,返回錯誤
else
e=*--S.top;
S.lenght--;
return e;
}
/*************************顯示*******************************/
void DispStack(SqStack S)
{
int i;

for(i=S.lenght;i>0;i--)
{
printf("%c",*(--S.top));
}
printf("\n");
}

//*******************主函數************************************/
int main(){
int i;
SqStack Lst;
char a,b,c,d,e,f;
char g;
printf("初始化棧:\n");
InitStack(Lst);
printf("依次進棧元素a,b,c,d,e,f\n");
cin>>a>>b>>c>>d>>e>>f;
Push(Lst,a);
Push(Lst,b);
Push(Lst,c);
Push(Lst,d);
Push(Lst,e);
Push(Lst,f);
printf("列印\n");
DispStack(Lst);

int l=StackLenth(Lst);
cout<<"棧的長度為"<<l<<endl;
printf("出棧序列:");
for(i=1;i<=6;i++)
{
Pop(Lst,g);
printf("%c ",g);
}
printf("\n");
printf("棧為:%s\n",(StackEmpty(Lst)?"空":"非空"));
printf("釋放棧\n");
FreeStack(Lst);
return 0;
}
可以正確運行,你看下可以不??希望能幫到樓主! 我用visual C++6.0編譯的,現在主流都是用這個,不好意思,WINTC我沒有用過,樓主可以自己改嗎??
額,你們老師太不人道了,WINTC好像在後面得加一個getch()吧??這個軟體我沒有用過