順序棧實現數據的棧存儲代碼
㈠ 順序棧用data[1..n]存儲數據,棧頂指針是top,則值為x的元素入棧的操作的代碼 是:
必須選A。
入棧操作,是先將top加1,然後push元素;
出棧操作,是先取出元素,然後top減1
㈡ 數據結構c語言實現採用順序存儲實現隊列的初始化、入棧、出棧操作
順序棧的實現
#include <stdio.h>
#include "iostream.h"
#define STACK_INT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
int InitStack(SqStack *S)
{
S->base==(int *)malloc(STACK_INT_SIZE *sizeof(int));
if(!S->base) exit(-2);
S->top=S->base;
S->stacksize=STACK_INT_SIZE;
return 1;
}
int GetTop(SqStack S,int *e)
{
if(S.top==S.base) return 0;
e=*(S.top-1);
return 1;
}
int Push(SqStack *S,int e)
{
if(S->top-S->base>=S->stacksize)
{
S->base=(int *)realloc(S->base,(S->stacksize+STACKINCREMENT) *sizeof(int));
if(!S->base) exit(-2);
S->top=S->base+S->stacksize;
}
*S->top++=e;
return 1;
}
int Pop(SqStack *S,int e)
{
if(S->top==S->base) return 0;
e=*--S->top;
return 1;
}
main()
{
int a,b,c;
int *p1,*p2,*p3;
p1=&a;p2=&b;p3=&c;
SqStack *S;
printf("Initialize the stack.\n");
InitStack(S);
Push(S,p1);
Push(S,p2);
Push(S,p3);
GetTop(S,p3);
Pop(S,p3);
}
㈢ 50分急求數據結構鏈棧與順序棧的基本操作代碼
//Sorry,看來我理解錯了,這是改後的》》》》》》》》
//順序棧>>>>>>>>>>>>>>>
#include<stdio.h>
#include<stdlib.h>
#define
MAXSIZE
100
typedef
struct
{
int
data[MAXSIZE];
int
top;
}SqStack;
void
PushStack(SqStack
*S,int
x)
//入棧
{
if(S->top==MAXSIZE-1)
printf("棧已滿,不能入棧!\n");
else
{S->data[++S->top]=x;printf("入棧已完成!\n");}
}
void
PopStack(SqStack
*S)
//退棧
{
if(S->top==-1)
printf("棧為空,不能出棧!\n");
else
{S->top--;printf("退棧已完成!\n");}
}
int
GetStackTop(SqStack
S)
//取棧頂元素
{
return
S.data[S.top];
}
main()
{
int
x,i;
SqStack
myStack;
myStack.top=-1;
do
{
printf("請選擇你需要的操作:\n1.置空棧.\n2.進棧.\n3.退棧.\n4.取棧頂元素.\n5.退出程序.\n(請輸入1或2或3或4或5):");
scanf("%d",&i);
switch(i)
{
case
1:myStack.top=-1;printf("棧已置空!\n");break;
case
2:printf("請輸入你要進棧的元素:");
scanf("%d",&x);
PushStack(&myStack,x);break;
case
3:PopStack(&myStack);break;
case
4:if(myStack.top!=-1)
printf("棧頂元素是
%d.\n",GetStackTop(myStack));
else
printf("棧為空,沒有元素!\n");break;
case
5:break;
default:printf("選擇錯誤,請重新輸入!\n");break;
}
}while(i!=5);
return
0;
}
//鏈棧>>>>>>>>>>>>
#include<stdio.h>
#include<stdlib.h>
typedef
struct
SNode
{
int
data;
struct
SNode
*next;
}SNode,*LinkStack;
LinkStack
top;
LinkStack
PushStack(LinkStack
top,int
x)
//入棧
{
LinkStack
s;
s=(LinkStack)malloc(sizeof(SNode));
s->data=x;
s->next=top;
top=s;
return
top;
}
LinkStack
PopStack(LinkStack
top)
//退棧
{
LinkStack
p;
if(top!=NULL)
{
p=top;
top=top->next;
free(p);
printf("退棧已完成\n");
return
top;
}
else
printf("棧是空的,無法退棧!\n");
return
0;
}
int
GetStackTop(LinkStack
top)
//取棧頂元素
{
return
top->data;
}
main()
{
int
i,x;
do
{
printf("請選擇你需要的操作:\n1.置空棧.\n2.進棧.\n3.退棧.\n4.取棧頂元素.\n5.退出程序.\n(請輸入1或2或3或4或5):");
scanf("%d",&i);
switch(i)
{
case
1:top=NULL;break;
case
2:printf("請輸入你要進棧的元素:");
scanf("%d",&x);
top=PushStack(top,x);
printf("進棧已完成!\n");break;
case
3:top=PopStack(top);break;
case
4:if(top!=NULL)
printf("棧頂元素是:%d!\n",GetStackTop(top));
else
printf("棧是空的,沒有元素!\n");break;
case
5:break;
default:printf("選擇錯誤,請重新輸入!\n");break;
}
}while(i!=5);
return
0;
}
㈣ 數據結構。編寫主函數實現順序棧的基礎操作(建棧、入棧、出棧、銷毀棧、取棧頂元素、顯示棧、清除棧,)
#include "stdio.h" #include "stdlib.h" #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct Stack{ int*base; int*top; int size; }Stack; void init(Stack*S) { S->base=(int*)malloc(STACK_INIT_SIZE*sizeof(int)); S->top=S->base; S->size=STACK_INIT_SIZE; } Stack pushstack(Stack S,int e) { if (S.top-S.base==S.size) {S.base=(int*)realloc(S.base,(S.size+STACKINCREMENT)*sizeof(int)); if(!S.base) {printf("存儲分配失敗!"); exit(1); } S.top=S.base+S.size; S.size+=STACKINCREMENT; } *S.top++=e; return S; } Stack popstack(Stack S) { if(S.top==S.base)exit(1); --S.top; return S; } int main() { int i; Stack S; init(&S); scanf("%d",&i); S=pushstack(S,i); printf("%d\n",*(S.top-1)); S=popstack(S); if(S.top==S.base) printf("棧為空"); system("pause"); return 0; }
㈤ 編寫主函數實現順序棧的基礎操作
棧有兩種存儲結構,因此表示與實現也是二種形式。 1)順序棧是利用一組地址連續的存儲單元依次存放自棧底到棧頂的數據元素。 表示: ┌──┐ 由於畫圖太不方便,現描述如下:圖代表的是一維數組,下面為棧底,也是下 top→ │ │ 標最小的值,上面top為棧頂,而不一定是數組的最大的下標。 ├──┤ base → │ │ └──┘ 主函數:是指實現調用棧實現建立、插入、刪除等操作的main()嗎?你需要的是循環菜單的方式還是順序的一一實現的方式?沒有說明無法給准確的答案。 2)鏈式棧利用單鏈表的實現其對棧的各種操作 表示:┌──┬──┐ ┌──┬──┐ ┌──┬──┐ top→ │ │ ─┼→ │ │ ─┼→ ......→│ │ ∧ │ └──┴──┘ └──┴──┘ └──┴──┘ 鏈表中每個結點都有data和next二個域。
㈥ 建立順序存儲的棧,並對之進行入棧、出棧、取棧頂元素操作的c語言演算法
#include "process.h"
#include "stdio.h"
#include "assert.h"
const int stackIncreament=20; //棧溢出時擴展空間的增量
class SeqStack
{
private:
int top; //棧頂指針
int MAX; //棧的最大可容納個數
int *elements; //存放棧中元素的棧數組
void overflowProcess(); //棧的溢出處理
public:
SeqStack(int sz=50); //構造函數
~SeqStack() { delete[]elements; } //析構函數
bool pop1(int & x); //元素出棧
void push1(const int & x); //新元素進棧
bool IsEmpty1()const; //判斷棧空與否
bool IsFull1()const; //判斷棧滿與否
void output1(); //輸出元素進棧順序
void output(int x); //輸出x
};
SeqStack::SeqStack(int sz):top(-1),MAX(sz)
{
elements=new int[MAX]; //創建棧的數組空間
assert(elements!=NULL); //斷言:動態存儲分配成功與否
}
bool SeqStack::pop1(int & x) //棧頂元素出棧
{
if(IsEmpty1()==true) return false;//判棧空否,若棧空則函數返回
x=elements[top--]; //棧頂指針退1
return true; //退棧成功
}
void SeqStack::push1(const int & x) //新元素進棧
{
if(IsFull1()==true) overflowProcess(); //棧滿則溢出處理
elements[++top]=x; //棧頂指針先加1,再進棧
}
bool SeqStack::IsEmpty1() const //判斷棧空與否
{
return (top==-1)?true:false;
}
bool SeqStack::IsFull1()const //判斷棧滿與否
{
return (top==MAX-1)?true:false;
}
void SeqStack::overflowProcess() //棧的溢出處理
{
//私有函數,擴充棧的存儲空間。
int *Array=new int[MAX+stackIncreament]; //和課本不一樣 ??????????
if(Array==NULL)
{
printf("存貯分配失敗 ! \n");
exit(1);
}
for(int i=0;i<=top;i++) Array[i]=elements[i];
MAX=MAX+stackIncreament;
delete []elements;
//elements=Array;
}
void SeqStack::output1() //元素入棧順序輸出
{
int n=0;
int t=top;
for(int i=0;i<top;i++)
{
printf(" %d",elements[i]);
n++;
if(n%10==0)
printf("\n");
}
}
void SeqStack::output(int x) //棧內元素輸出
{
printf(" %d",x);
}
//----------------------順序棧函數--------------------------//
void SeqStack1( SeqStack A)
{
int x=-1;
int X;
printf("請輸入要入棧A的元素值,以0結束:\n");
while(x!=0){ //新元素進棧
scanf("%d",&x);
A.push1(x);
}
printf("\n元素進棧順序是 :");
A.output1();
printf("\n\n");
A.pop1(X); //元素出棧
if(!A.pop1(X))
printf("元素出棧失敗 !\n");
else
{
printf("\n棧頂元素是: ");
A.output(X);
printf("\n");
printf("\n元素出棧的結果是 : ");
A.output(X);
while(A.pop1(X))
A.output(X);
}
}
void main()
{
printf("----------順序棧的調試----------\n");
printf("\n \n");
SeqStack A;
SeqStack1(A);
printf("\n \n");
}
㈦ 設計一個動態數組存儲結構的順序棧類SeqStack,
思路很簡單,根放在0位置,以後假定當前位置是i,那麼左子結點在2i+1,右子結點在2i+2。比如根的左子結點在1,右子結點在2。結點1的左子結點在3,右子結點在4。定義一種空值表示沒有子結點,比如empty。
假定一個結點由3個成員組成:value, left, right
數組假定是全局的,如果不是可以作為參數傳送。
遞歸實現比較簡單:
void btree2array(node, index)
{
if(node == NULL)
array[index] = empty;
array[index] = node->value;
btree2array(node->left, index * 2 + 1);
btree2array(node->right, index * 2 + 2);
}
開始調用的時候就一句話:
btree2array(root, 0);
另外,虛機團上產品團購,超級便宜