1. 程式人生 > 其它 >資料結構:順序棧的建立、初始化、入棧、出棧、輸出(C語言)

資料結構:順序棧的建立、初始化、入棧、出棧、輸出(C語言)

技術標籤:資料結構資料結構指標演算法c語言資料分析

大一學C語言的時候還沒覺得有啥難的,直到現在學了資料結構。。。

還是自己技術不過關,理解不到位,還需要努力。。。

下面貼關於順序棧的程式碼:

#include<stdio.h>
#include<stdlib.h>

//儲存結構定義
#define STACK_INIT_SIZE 100//儲存空間初始分配量
#define STACKINCREATEMENT 10//儲存空間分配增量
#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int status;
typedef struct{
int *base;
int *top;
int stacksize;
}sqstack;

//初始化

status initstack(sqstack &s)
{
	s.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
	if(!s.base)
		exit(OVERFLOW);
	s.top=s.base;
	s.stacksize=STACK_INIT_SIZE;
	return OK;
}

//入棧

status push(sqstack &s,int e){
if(s.top-s.base>=s.stacksize)//棧滿
{
	s.base=(int *)realloc(s.base,(s.stacksize+STACKINCREATEMENT)*sizeof(int));//增加儲存空間

    if(!s.base)
    exit(OVERFLOW);

s.top=s.base+s.stacksize;
s.stacksize = s.stacksize + STACKINCREATEMENT;
}
*s.top=e;
*s.top++;
return OK;
}

//出棧

status pop(sqstack &s,int &e){ //&e??
if(s.base==s.top)//棧空
return ERROR;

e=*(s.top-1);  //刪除棧頂元素,指標top減一
*s.top--;
return OK;
}

//獲取棧頂元素
status gettop(sqstack &s,int &e){
	if(s.base==s.top)
		return ERROR;
e=*(s.top-1);
return OK;
}

//輸出棧中元素
status printstack(sqstack &s){
	if(s.base==s.top){
		printf("空棧\n");
		return ERROR;
	}
	else
		printf("棧的內容為:");

		for(;s.base!=s.top;s.base++){ //for(;s.base!=s.top;s.top--)
			printf("%d  ",*s.base);}  //printf("%d  ",*(s.top-1));

		return OK;
}



int main(){
sqstack s;
int x;//輸入的數字
if(initstack(s))
printf("初始化成功 !");

while(1){
printf("請輸入要進行的操作:\n");
printf("1.進棧\n 2.出棧\n 3.獲取棧頂元素\n 4.列印\n 0.退出\n");

scanf("%d",&x);
if(x==0)
break;
switch(x)
{
case 0:break;
case 1:
	int pushnumber;
	printf("請輸入要進棧的元素:");
	scanf("%d",&pushnumber);
	if(push(s,pushnumber))
		printf("進棧成功\n");
	else
		printf("進棧失敗\n");
	break;
case 2:
	int e;
	if(pop(s,e))
		printf("元素%d出棧\n",e);
	else
		printf("出棧失敗\n");
	break;
case 3:
	if(gettop(s,e))
	printf("棧頂元素是 : %d\n",e);
	else
	printf("獲得棧頂元素失敗\n");
	break;
case 4:
	if(printstack(s))
		printf("列印完畢\n");
	break;
default:
	printf("您進行了誤操作,請重試!\n");
	break;
}
}
return 1;
}

個人認為需要注意的方面有:

1.malloc函式、realloc函式、sizeof函式 需要搞明白

2.結構體的定義與具體語法

3.指標方面 我個人對於這方面還是不太明白,希望有大佬能指點一下

4.順序棧的定義

執行結果:

希望大佬們提供寶貴的意見