棧的基本操作


小結:

一、棧的基本定義:是限定僅在表尾進行插入或刪除操作的線性表。也叫做后進先出的線性表。

二、棧的表示和實現:

               1.順序棧:利用一組地址連續的存儲單元依次存放自棧底到棧頂的元素。

               2.鏈棧:鏈棧是沒有附加頭結點的運算受限的單鏈表。棧頂指針就是鏈表的頭指針。

三、棧的應用舉例:

                 1.數制轉換

                 2.括號匹配的檢驗(2015年考研真題)

                 3.行編輯程序

                 4.棧與遞歸

                 5.表達式求值

棧的基本操作實現:

棧的結構定義:

typedef struct
{
	int * base;
	int * top;
	int stacksize;
}SqStack;

  

初始化:

void InitStack(SqStack * s)
{
	s->base = (int *)malloc(STACK_INIT_SIZE*sizeof(int));
	s->top = s->base;
	s->stacksize = STACK_INIT_SIZE;
}

  

進棧:

void Push(SqStack *s, int e)
{
	if (s->top - s->base >= s->stacksize)
	{
		s->base = (int *)realloc(s->base, (s->stacksize + STACKINCREMENT)*sizeof(int));
		s->top = s->base + s->stacksize;
		s->stacksize += STACKINCREMENT;
	}
	*s->top = e;
	s->top++;
}

  

出棧:

int Pop(SqStack *s)
{
	int i;
	if (s->top == s->base)
		return 0;
	s->top--;
	i = *s->top;
	return i;
}

  

打印函數:

void Print(SqStack *s)
{
	int * temp;
	temp = s->top;
	while (temp != s->base)
	{
		temp--;
		printf("%d ", *temp);
    }
}

  

主函數:

int main()
{
	SqStack S;
	InitStack(&S);
	int num;
	for (int i = 1; i <= 6; i++)
	{
		scanf("%d", &num);
		Push(&S, num);
	}
	printf("打印棧里的元素:");
	Print(&S);
	printf("\n");

	int n = Pop(&S);
	printf("出棧的元素為:%d\n", n);
}

  

運行結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM