急!用c语言实现链栈的操作

用c语言实现堆栈在链式存储

堆栈在链式存储上的操作包括:
(1) 初始化空栈 INITSTACK(top)
(2) 判空栈操作 EMPTY(top)
(3) 进栈操作 PUSH(top,x)
(4) 出栈操作 POP(top)
(5) 取栈顶元素操作 GETTOP(top)
(6) 栈置空操作CLEAR(top)
(7) 求当前栈中元素个数的操作 CURRENT_SIZE(top)

程序结构
头文件------------做宏定义、结构体声明、自定义的函数头引用
功能函数文件------实现各种操作的函数
主函数文件--------主要实现对各种功能函数的调用

主函数一般包括以下几部分内容:
主函数中主要要实现以下功能:
A。定义一些需要用到的变量,及对变量进行初始化;
B。建立一个初始数据结构,如线性表、栈、队列,并赋一些初值,如abcdef等;
C。输出初始数据结构的初始值;
D。开始调用该数据结构上的各种函数,调用函数时,有输入参数的,应该给输入参数赋值之后才能调用,调用函数之后,根据函数的返回值做进一步处理,比如输出返回值等,每次调用函数之后都要求重新输出数据结构的值。
E。在主函数中要求能循环选择各种操作
有请高手把所有实现代码补上‘‘谢谢‘‘

typedef struct node
{ ElemType data;
struct node *next;
} LinkStack;
⑴置空栈
void InitLinkStack( LinkStack * & s)
{ s=NULL;
}
⑵判栈空
int IsEmptyLinkStack(LinkStack *s )
{ if(s==NULL)
return 1;
else
return 0;
}
⑶ 入栈/*将元素x插入链栈top的栈顶*/
void PushLinkStack(LinkStack* &s , ElemType x)
{ LinkStack *p;
p=malloc(sizeof(LinkStack)); /*生成新结点*s */
p->data=x;
p->next=s;
s=p;

}
⑷出栈/*删除链栈top的栈顶结点*/
int PopLinkStack (LinkStack* & s, ElemType &x)
{ LinkStack *p;
if(s==NULL) return 0;
x = s->data; /*将栈顶数据存入*x */
p = s; /*保存栈顶结点地址*/
s = s->next; /*删除原栈顶结点*/
free (p); /*释放原栈顶结点*/
return 1; /*返回新栈顶指针*/
}
(5) 取栈顶元素
int GetLinkStackTop (LinkStack* s, ElemType &x)
{
if(s==NULL) return 0;
x = s->data; /*将栈顶数据存入*x */
return 1; /*返回新栈顶指针*/
}
主函数怎么写吧
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-12-17
任何一本数据结构书上应该都有这些
推荐清华c语言版

急!用c语言实现链栈的操作
⑷出栈\/*删除链栈top的栈顶结点*\/ int PopLinkStack (LinkStack* & s, ElemType &x){ LinkStack *p;if(s==NULL) return 0;x = s->data; \/*将栈顶数据存入*x *\/ p = s; \/*保存栈顶结点地址*\/ s = s->next; \/*删除原栈顶结点*\/ free (p); \/*释放原栈顶结点*\/ return ...

怎样用C语言写出对栈进行的五种运算:push()、pop()、top()、empty...
这是我用链表写的:include <stdio.h> include <stdlib.h> typedef struct node { int x;struct node *next;}Node;typedef struct stack { Node *top;}Stack;void InitStack(Stack *s){ s->top=NULL;} int IsEmpty(Stack *s){ if(s->top==NULL)return 1;else return 0;} void PushSt...

C语言 出栈操作Pop(struct SqStack * MyStack, ElemType *e_百度...
操作结果:若S为空链栈,则返回TRUE,否则返回FALSE *\/status stackIsEmpty (linkStack *S) {return S->top->next == NULL;}\/* 入栈 *\/\/* 操作结果:在S的栈顶插入新的元素e *\/status push (linkStack *S, elemType e) {sNodePtr p;p = (sNodePtr) malloc (SNODE_SIZE); \/* ...

12345链表出入栈c语言写法
include <stdio.h> include <stdlib.h> typedef int data_t;typedef struct linknode{ data_t data;struct linknode *next;\/\/结构体不完整类型,可以定义指针,但是不能引用内容 }link_t;link_t *creat_link(){ link_t *head;head = malloc(sizeof(link_t));head->next = NULL;return he...

如何采用循环的方式入栈呢?用c语言
else \/* 对第二个堆栈操作 *\/PtrS->Data[--(PtrS->Top2)] = item;} 用链表的话:void Push( ElementType item, LinkStack *S ){ \/* 将元素item压入堆栈S *\/struct Node *TmpCell;TmpCell=(LinkStack *)malloc(sizeof(struct Node));TmpCell->Element = item;TmpCell->Next = S->Nex...

数据结构定义一个栈并实现入栈和出栈操作的程序c语言完整版
通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。常用数据结构:数组 (Array)、栈 (Stack)、队列 (Queue)、链表 (Linked List)、树 (Tree)、图 (Graph)、堆 (Heap)、散列表 (Hash)...

c语言链栈求解一个迷宫是否有解。迷宫由0,1组成,随机生成,长宽都是50...
假定一个角色走这个迷宫,第一步踩进左上角的格子。标记当前格子已经不可通过。如果当前格子是终点,则输出整个路径。结束求解过程。循环枚举各个前进方向,令表示前进方向的循环变量为D:若前方格子不可通过,continue。将当前的前进方向压栈,进入这个格子。跳转到步骤3。如果路径栈为空,则结束求解过程。

c语言 栈的操作
\/\/pop操作 T pop(stack* st){ if(isEmpty(st)){ printf("栈空");return NULL;} char t=st->aa[st->p];st->p=st->p-1;printf("%c ",t);return t;};\/\/栈销毁 void destroy(stack* st){ free(st);};int main(){ stack* st = createEmptyStack();if(isEmpty(st)) ...

C语言问题 关于栈的应用,数学运算后缀表达式转换成中缀表达式
{\/\/销毁链栈S。LinkStack temp=S,p;while(temp){ p=temp;temp=temp->next;free(p);} } void Push(LinkStack &S, char x){\/\/入栈。LinkStack temp=(LinkStack )malloc(sizeof(Snode ));temp->data=x;temp->next=S->next;S->next=temp;} void Pop(LinkStack &S, char &x){\/...

c语言用栈实现八进制转十进制,完整程序,求解
这个链栈应该就是一个用链表弄的后进先出的栈结构。top指针永远指向栈的最上面的那个节点。这个函数是新加一个节点到这个栈中,首先分配了空间给s,s是要新加入这个栈的那个节点。s->next=top;就是让s指向栈的最上面的那个元素。top=s;因为现在最上面的节点是s了,所以让top指向s,使s成为栈顶...

相似回答