</pre><pre code_snippet_id="505570" snippet_file_name="blog_20141102_3_3508855" name="code" class="cpp">
顺序栈,即栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。同一时候附设指针top指示栈项元素在顺序栈中的位置。

队列 句子分析 精辟的诠释 有图片_顺序栈




#include "stdio.h"//包括头文件。就是编译时候把stdio.h中的内容替换到这个位置。
struct stack//定义结构体stack
{
int length;//定义整型变量length
struct data *top;//定义data类型的指针变量top
};
struct data//定义data结构体
{
char c;//定义字符变量c
struct data *next;//定义data类型指针变量next
};

struct stack *InitStack()//定义函数initstack,函数返回值是stack类型的指针
{
struct stack *p;//定义stack指针p
p=(struct stack *)malloc(sizeof(struct stack));//给p分配内存空间,空间大小正好够保存一个stack数据
p->length=0;//给p指向的内存空间赋值
p->top=NULL;//给p指向的内存空间赋值
return p;//返回p的值
}

Push(struct stack *p,char a)//定义函数,函数带两个參数指针p和字符a
{
struct data *t;//定义data类型指针t
t=(struct data *)malloc(sizeof(struct data));//给t分配内存空间
t->next=p->top;//给t指向的data型内存空间赋值
p->top=t;//把t的地址保存到p指向的内存空间中的一个变量保存起来
t->c=a;//给t指向的data型内存空间赋值
p->length++;//p指针指向的结构体变量中的length变量+1
return 0;//返回0
}

Pop(struct stack *p,char *a)//定义函数,带两个參数:指针p和字符指针a
{
struct data *t;//定义指针t
t=p->top;//把p中的top变量赋给t
p->top=t->next;//改变p中的top变量值为t中next变量的值
*a=t->c;//改变函数第二个參数的值为t中c变量的值
free(t);//释放t指向的内存空间
p->length--;//p中的length变量-1
return 0;//返回0
}
char change(int n)//定义函数,带1个參数,n
{
if(n>9)return 'A'+n-10;//推断,假设n>9则返回英文字母表中相应的英文字母.
return n+'0';//否则返回0
}

main()//入口函数
{
int n,val;//定义整数n
char c;//字符c
struct stack *p;//stack类型指针p
p=InitStack();//运行函数initstack,返回值给p
printf("请输入十进制数:"); //屏幕输出 请输入十进制数:
scanf("%d",&n);//从键盘输入一个整数,给n
printf("请输入要转换的进制:");
scanf("%d",&val); //从键盘输入一个整数,给val

printf("结果:");
while(n>0) //循环,假设n大于0则继续运行,否则跳出循环
{
c=change(n%val); //运行change函数,返回值给c
n/=val;
Push(p,c);//运行push函数
}
while(p->length!=0)//循环,假设p中保存的length变量不等于0则继续,否则跳出
{
Pop(p,&c); //运行pop函数
printf("%c",c); //输出c变量中保存的字符
}
printf("\n");//换行
return 0;//返回0
}