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");