天天看點

鍊式棧



1.編寫頭檔案

#define

datatype

int

struct

statcknode

{

num;                

//編号

data;          

//資料

statcknode *pnext;//指針域

};

typedef

stacknode;

//初始化

stacknode *

init(stacknode

*phead);

//進棧

push(stacknode

*phead,int

num,datatype

data);

//出棧

pop(stacknode

* phead,stacknode

*poutdata);

//清空

freeall(stacknode

//列印

printfall(stacknode

2.編寫連結清單的實作代碼

#include

"stacklinknode.h"

"stdio.h"        

//null在stdio.h中

"stdlib.h"       

//malloc在stdlib.h中

*phead)

return

null;

}

*phead,

num,

data)

stacknode *pnewnode

= (stacknode *)malloc(sizeof(stacknode));

pnewnode->num

= num;

pnewnode->data

= data;

pnewnode->pnext

= null;

//如果是空的鍊式棧

if (phead

== null)

phead =

pnewnode;

else

//備份一個頭指針

stacknode *p

= phead;

while (p->pnext

!= null)

//一直向前

p =

p->pnext;

//插入

p->pnext

= pnewnode;

//傳回頭結點

phead;

* phead,

stacknode *poutdata)

//已經沒有元素

//表示隻有一個元素的時候

if (phead->pnext

poutdata->num

= phead->num;

poutdata->data

= phead->data;  

//取出資料

free(phead);//釋放記憶體

//表示棧頂的倒數第二個節點

while (p->pnext->pnext

//循環到倒數第二個節點

= p->pnext->num;

= p->pnext->data;

stacknode *p1

= null, *p2

//頭結點

p1 =

while (p1->pnext

//儲存下一個節點

p2 =

p1->pnext;

//跳過p2

p1->pnext

= p2->pnext;

//釋放節點

free(p2);

free(phead);

printf("%d,%d,%p,%p\n",

phead->num,

phead->data,

phead,

phead->pnext);

//通過遞歸的方式進行列印

printfall(phead->pnext);

3.實作代碼main.c

#pragma warning(disable:4996)

//#define_crt_secure_no_warnings

<stdio.h>

<stdlib.h>

void

main1()

num;

scanf("%d",

&num);

//列印資料

printf("num

= %d\n",num);

//建立一個鍊式棧的頭節點

stacknode *phead

printf("\n\n");

//通過這種方式實作列印列印十進制的二進制的表現形式

while (num)

printf("%d\n",

num % 2);

push(phead,

num % 2, 0);

num /= 2;

while (phead

stacknode *pout

pop(phead,pout);

printf("%d",pout->num);

system("pause");

main()

 stacknode *phead

 phead =

init(phead);   

//設定棧為null

1, 1);

2, 11);

3, 111);

4, 1111);

5, 11111);

 printfall(phead);

 /* phead =freeall(phead);

 printf("\n釋放以後");

 printfall(phead);*/

 while (phead

 {

 //儲存出棧的資料

 printf("出棧\n");

 stacknode *pout

pop(phead,

pout);

 printf("出棧之後\n");

 printf("\n出棧之後的資料%d,%d",

pout->num,

pout->num);

 }

 system("pause");

繼續閱讀