亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言怎么實現棧

發布時間:2021-11-22 15:41:41 來源:億速云 閱讀:152 作者:iii 欄目:互聯網科技

這篇文章主要介紹“C語言怎么實現棧”,在日常操作中,相信很多人在C語言怎么實現棧問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C語言怎么實現棧”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

什么是數據結構?

數據結構是什么?要了解數據結構,我們要先明白數據和結構,數據就是一些int char 這樣的變量,這些就是數據,如果你是一個籃球愛好者,那么你的球鞋就是你的數據,結構就是怎么把這些數據排列組合,怎么把數據擺放好才能方便你找到這些數據,把數據和結構合在一起理解就是所謂的數據結構,簡單點,就是處理數據的方式方法。

平時在家里面,你有沒有隨便擺放自己的鞋子,然后要找鞋子的時候要花費非常多是時間,可能你老婆也很生氣,每天都亂擺鞋子導致她打掃衛生非常麻煩,然后有一天,你買了一個非常酷的鞋架,有了這個鞋架之后,你的鞋子終于有家了,這個鞋架就是起到處理鞋子的作用了。

什么是棧?

棧可以理解為數據結構中的一種,這種數據結構的特點是先進去的人「數據」后出來,就像下面的圖片一樣,如果棧是一個洞,人「數據」只能從洞的一個口進去,然后出來也只能從一個口出來,而且洞的寬度就只能容納一個人「數據」,好了,那先進去的那個人「數據」最傻逼了,一定要等后面進來的人「數據」都先出去了才能出去。

C語言怎么實現棧  
C語言怎么實現棧  
 

用C 語言實現一個棧

我寫代碼是很水的,之前有一個同學寫了一個棧讓我檢查,我看了下,好像我寫代碼的能力比他厲害一些,代碼比較簡單,然后講一下幾個比較重要的函數,希望大家在面試的時候,隨手就甩出一個棧砸死面試官,哈哈。

#include "stdio.h"
#include "stdlib.h"

struct List{
int data;
struct List * next;
};

struct Stack{
struct List *head;
int size;
};


struct Stack * StackInit(void)
{
struct Stack *stack = NULL;
stack =  (struct Stack*)malloc(sizeof(struct Stack));
stack->head = (struct List *)malloc(sizeof(struct List));
stack->head->next = NULL;
stack->size = 0;
return stack;
}

int StackPush(struct Stack *stack,int data)
{
struct List *tmp = (struct List *)malloc(sizeof(struct List));
tmp->data = data;
tmp->next = stack->head->next;
stack->head->next = tmp;
stack->size++;
//printf("push:%d \n",data);
return 0;
}

int IsStackEmpty(struct Stack *stack)
{
/*如果頭指針指向下一個為空,說明棧為空*/
if(stack->head->next == NULL)
return 1;
else
return 0;
}

int StackPop(struct Stack *stack,int *data)
{
struct List *tmp = NULL;
if(IsStackEmpty(stack))
return -1;

tmp = stack->head->next;
*data = tmp->data;
stack->head->next = tmp->next;
stack->size--;
free(tmp);

//printf("pop:%d \n",*data);
return 0;
}


int main(void)
{
int i = 0;
struct Stack *stack = NULL;
stack = StackInit();
for(i = 0;i<5;i++)
{
StackPush(stack,i);
}
for(i = 0;i<5;i++)
{
int data = 0;
StackPop(stack,&data);
printf("%d ",data);
}
printf("\n");
return 0;
}
   

1-棧頭部

棧頭部,也就是棧頂指針,我們用指針單鏈表實現一個棧,一定要知道這個棧頂的指針,有頭就有棧,沒有頭,這個棧也就跨了。

struct Stack *stack = NULL;
stack = StackInit();
 

這個就是定義一個棧,也就是malloc出來一個內存,專門存這個棧頂的。

C語言怎么實現棧    

2-出棧

出棧的方法跟我之前說的差不多,只不過出棧代碼上需要做判斷。

int StackPop(struct Stack *stack,int *data)
{
struct List *tmp = NULL;
if(IsStackEmpty(stack))
return -1;

tmp = stack->head->next;
*data = tmp->data;
stack->head->next = tmp->next;
stack->size--;
free(tmp);

//printf("pop:%d \n",*data);
return 0;
}
 

先判斷這個棧是不是空的,是不是空的判斷方法就是通過判斷head->next的指針是否為空。

然后把head->next 這個位置的數據取出來,取出來后,再把head->next的指針指向 取出來這個位置 的next 位置。

然后再記得free掉。就Ok了。

C語言怎么實現棧    

3-入棧

入棧的操作和出棧的操作剛好相反,就是改變一下位置和指針的指向。

int StackPush(struct Stack *stack,int data)
{
struct List *tmp = (struct List *)malloc(sizeof(struct List));
tmp->data = data;
tmp->next = stack->head->next;
stack->head->next = tmp;
stack->size++;
//printf("push:%d \n",data);
return 0;
}
   

用數組來實現一個棧

數組本身是一種數據結構,使用數組實現一個棧也是非常簡單方便的,大家請看。

#include "stdio.h"
#include "stdlib.h"

/*棧的大小*/
#define LENGHT (100)

struct Stack{
int stack_array[LENGHT];
unsigned int size;//棧動態長度
};


struct Stack * StackInit(void)
{
struct Stack *stack = NULL;
stack =  (struct Stack*)malloc(sizeof(struct Stack));
stack->size = 0;
return stack;
}

int StackPush(struct Stack *stack,int data)
{
if(stack->size >= LENGHT)
{
printf("stack is full\n");
return (-1);
}
stack->stack_array[stack->size] = data;
stack->size++;
//printf("push:%d size:%d\n",data,stack->size);
return 0;
}

int IsStackEmpty(struct Stack *stack)
{
/*如果頭指針指向下一個為空,說明棧為空*/
if(stack->size == 0)
return 1;
else
return 0;
}

int StackPop(struct Stack *stack,int *data)
{
stack->size--;
if(IsStackEmpty(stack))
return -1;

*data = stack->stack_array[stack->size];

//printf("pop:%d size:%d\n",*data,stack->size);
return 0;
}


int main(void)
{
int i = 0;
struct Stack *stack = NULL;
stack = StackInit();
for(i = 0;i<20;i++)
{
StackPush(stack,i);
}
for(i = 0;i<21;i++)
{
int data = 0;
StackPop(stack,&data);
printf("%d \n",data);
}
printf("\n");
return 0;
}

到此,關于“C語言怎么實現棧”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临西县| 宁南县| 荔浦县| 兰溪市| 海口市| 阳新县| 沛县| 乌拉特中旗| 尚义县| 绥化市| 买车| 旺苍县| 晋城| 县级市| 济南市| 油尖旺区| 祁阳县| 灵寿县| 咸丰县| 中西区| 开封市| 通道| 曲沃县| 沂源县| 青川县| 库尔勒市| 开封县| 三亚市| 冷水江市| 荔波县| 安龙县| 景泰县| 汉中市| 英德市| 济南市| 哈密市| 西平县| 芮城县| 南岸区| 鄂托克旗| 玛沁县|