链表堆栈的实现方法c语言(急求c语言关于堆栈的长度)
本文目录
- 急求c语言关于堆栈的长度
- c语言实现队列和栈的方法
- C语言链栈问题
- c++ 设计一个整数链表类,满足栈操作
- 本人跪求C++程序-------设计一个堆栈
- 程序编写要求: 1、 以链表方式实现一个堆栈,堆栈的每个元素(结点)可以存放一个字符串(小于20个字符)
- C++问题,急急急!!!使用链表实现一个整数堆栈的相关函数
- 编程实现链栈的入栈和出栈操作 在线等着你哦!
- 高分悬赏!!![C++]利用链表构造一个堆栈类Stack
急求c语言关于堆栈的长度
#include 《stdio.h》#include 《stdlib.h》#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef struct SqStack{ int *base; int *top; int stacksize;} SqStack;void InitStack(SqStack *S)//创建栈{ S-》base=(int*)malloc(STACK_INIT_SIZE*sizeof(int)); S-》top=S-》base; S-》stacksize=STACK_INIT_SIZE;}void Push(SqStack *S,int e)//进栈{ if(S-》top-S-》base》=S-》stacksize) { S-》base=(int*)realloc(S-》base, (S-》stacksize+STACKINCREMENT)*sizeof(int)); S-》top=S-》base+S-》stacksize; S-》stacksize+=STACKINCREMENT; } *(S-》top)=e; S-》top++;}int Pop(SqStack *S)//出栈{ S-》top --; return *S-》top;}int StackEmpty(SqStack *S)//判断栈是否为空{ if(S-》top == S-》base ) return 1; else return 0;}int Length(SqStack *S)//求栈的长度{ return(S-》top - S-》base);}void main(){ SqStack S; InitStack(&S); Push(&S,1); printf("长度为:%d\n", Length(&S)); Push(&S,2); printf("长度为:%d\n", Length(&S)); Push(&S,3); printf("长度为:%d\n", Length(&S)); Pop(&S); printf("长度为:%d\n", Length(&S)); Push(&S,4); printf("长度为:%d\n", Length(&S)); Push(&S,5); printf("长度为:%d\n", Length(&S)); printf("栈里面还有:"); while(!StackEmpty(&S)) printf("%d ",Pop(&S)); }就他了
c语言实现队列和栈的方法
#define OVERFLOW -1#define OK 1#define ERROR 0#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define N 20typedef char SElemType; typedef int Status;typedef struct { SElemType *base; SElemType *top; int stacksize;}SqStack;#include《stdio.h》#include《stdlib.h》Status CreatStack(SqStack &S){ //创建栈 S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base)exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK;}//CreatStackStatus Push(SqStack &S,SElemType e){ //插入e为新的栈顶元素 if(S.top-S.base》=S.stacksize){//栈满,追加存储空间 S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base)exit (OVERFLOW);//存储空间分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return OK;}//PushStatus Pop(SqStack &S ,SElemType &e){ //若栈不空,删除栈顶元素,并用e返回其值 if(S.top==S.base) return ERROR; e=*--S.top; return OK;}//Pop typedef char QElemType;typedef struct QNode{ QElemType data; struct QNode *next;}QNode,*QNodePtr;typedef struct{ QNodePtr front; QNodePtr rear;}LinkQueue;Status CreatQueue(LinkQueue &Q){ //建立一个空的链式栈 Q.front=Q.rear=(QNodePtr)malloc(sizeof(QNode)); if(!Q.front)exit(OVERFLOW); Q.front-》next=NULL; return OK;}Status EnQueue(LinkQueue &Q,QElemType e){ QNodePtr p;p=(QNodePtr)malloc(sizeof(QNode));if(!p)exit(OVERFLOW);p-》data=e;p-》next=NULL;Q.rear-》next=p;Q.rear=p;return OK;}Status DeQueue(LinkQueue &Q,QElemType &e){QNodePtr p;《br》if(Q.front==Q.rear) return ERROR;《br》p=Q.front-》next; e=p-》data;《br》Q.front-》next=p-》next;《br》if(Q.rear==p) Q.rear=Q.front;《br》free(p);《br》return OK;《br》}int stackPalindrom_Test()//判别输入的字符串是否回文序列,是则返回1,否则返回0{ printf("栈练习,请输入要判断的字符串以#作为结束符,不要超过二十个字符\n"); SqStack S; CreatStack(S); char c; SElemType a; SElemType b; int count = 0; fgets( b, N, stdin ); while((b)!=’#’) { Push(S,b); //进栈 count++; } int i = 0; while(i 《 count) { Pop(S,a); if(a!=b) return ERROR; i++; } return OK;}//stackPalindrom_Test int queuePalindrom_Test()//判别输入的字符串是否回文序列,是则返回1,否则返回0{ printf("队列练习,请输入要判断的字符串以#作为结束符,不要超过二十个字符\n"); LinkQueue Q; CreatQueue(Q); char c; SElemType a; SElemType b; int count = 0; fgets( b, N, stdin ); while((b)!=’#’) { EnQueue(Q,b);; //入列 count++; } while(count-- 》 0) { DeQueue(Q,a); if(a!=b) return ERROR; } return OK;}//queuePalindrom_Test Status main(){ if(stackPalindrom_Test()==1) printf("是回文\n"); else printf("不是回文\n"); if(queuePalindrom_Test()==1) printf("是回文\n"); else printf("不是回文\n"); return OK;}
C语言链栈问题
#include《stdio.h》#include《malloc.h》#define null 0typedef struct node{ int data; struct node *next;}linkstack;linkstack *top;/*linkstack *initstack(linkstack *top) //初始化栈将栈的数据设空//{ top-》next=null; return top;} 这个函数没必要。return (top-》next==null);也是错的。*/ linkstack *push(linkstack *top,int x) ////入栈{ linkstack *p; p=(linkstack*)malloc(sizeof(linkstack)); p-》data=x; p-》next=top;////要理解栈的结构,栈顶是链表的头部,所以p-》next要指向即时的top//// top=p; return top;}linkstack* pop(linkstack *top) //出栈{ linkstack *p; if(!top) { printf("空链栈"); return null; } p=top; top=top-》next; free(p); //释放存储空间 return top;}void print(linkstack *top) //输出栈{ linkstack *p; p=top; while(p!=null) ////刚开始栈顶的next项为空//// { printf("%d\n",p-》data); p=p-》next; }}void main() { int x,i; top=(linkstack*) malloc(sizeof(linkstack)); scanf("%d",&x); top-》data=x;//头部赋值。 top-》next=null; // initstack(top); for(i=1;i《=3;i++) { scanf("%d",&x); top=push(top,x);//返回一个指针。 } print(top); top=pop(top);//返回一个指针。 print(top);}
c++ 设计一个整数链表类,满足栈操作
#include《iostream》#include《ctime》#include《stdlib.h》using namespace std;int data;//放数据struct Node//链表节点{ int num; Node *next;};class INT// INT 类{private: Node *d; Node *head; static int count;public: friend void up(INT& KKK); INT(){this-》d=NULL;this-》head=NULL;} ~INT(){cout《《"Destrucing called ! "《《endl;//析构} void creat(int a); void build();};int INT::count=0;void INT::creat(int a)//创建链表的函数{ if(head==NULL){ head=new Node; head-》num=a; head-》next=NULL; count++;//计数器 } else{ d=head; while(d-》next!=NULL) d=d-》next; Node* k=new Node; k-》num=a; d-》next=k; k-》next=NULL; count++; }}void INT::build()//产生随机数{ srand(time(NULL)); for(int i=0;i《100;i++) data=rand()%191+10; for(i=0;i《100;i++){ if(i==0) this-》creat(data); else{if(data) this-》creat(data);//调用创建链表的函数 } }}void up(INT & KKK)//加和函数{ int sum=0; Node* temp=KKK.head; while(temp!=NULL){ sum+=temp-》num; Node* q=temp-》next; delete temp;//加完之后删除 temp=q; } cout《《sum《《endl;}int main(){ INT KKK; KKK.build();//先产生数据,在此过程中建立链表 up(KKK); return 0;}我写的是10到200的。望采纳
本人跪求C++程序-------设计一个堆栈
#define stacksize 100//栈最大空间typedef int elemtype;//栈元素类型,可以根据需要更改typedef struct{ int top;//栈顶指针 elemtype data;}stack;//栈类型void initstack(stack &s)//建立空栈{ s.top=-1;}void push(stack &s,elemtype e)//压栈{ if(s.top》=stacksize) { printf("full!"); return; } s.data=e;}void pop(stack &s,elemtype &e)//弹栈{ if(s.top《=-1) { printf("empty stack!"); return; } e=s.data;}bool stackempty(stack s)//判断栈非空{ if(s.top==-1)return true; return false;}
程序编写要求: 1、 以链表方式实现一个堆栈,堆栈的每个元素(结点)可以存放一个字符串(小于20个字符)
#include《stdlib.h》#include《stdio.h》#include《string.h》#define LEN 21typedef struct StaElement{ char str; struct StaElement * next;}StaElem, *StaBottom;typedef struct myStack{ StaBottom top; StaElem bottom; int numbers;}MyStack;void stackini(MyStack *mstcks){ mstcks-》numbers=0; mstcks-》bottom.str = ’\0’; mstcks-》bottom.str = ’\0’; mstcks-》bottom.next = NULL; mstcks-》top=&mstcks-》bottom;}void stackpush(MyStack *mstcks,char *elem){ mstcks-》top-》next=(StaBottom)malloc(sizeof(StaElem)); mstcks-》top = mstcks-》top-》next; strncpy(mstcks-》top-》str,elem,LEN-1); mstcks-》numbers++;}void stackpop(MyStack *mstcks,char *elem){ StaBottom p = &mstcks-》bottom; strcpy(elem,mstcks-》top-》str); while(p != mstcks-》top) { p=p-》next; } free(mstcks-》top); mstcks-》top = p; mstcks-》top-》next = NULL; mstcks-》numbers++;}int main(){ MyStack mstck; stackini(&mstck); char str1="Hi!"; printf("str1:%s\nstr2:%s\n",str1,str2); stackpush(&mstck,str1); stackpop(&mstck,str2); printf("str1:%s\nstr2:%s\n",str1,str2); return 0;}
C++问题,急急急!!!使用链表实现一个整数堆栈的相关函数
给你一个例子作为参考:
//stack.h#include 《iostream》#include 《assert.h》struct StackNode{int Data;struct StackNode *pNext;};struct Stack_T{struct StackNode * head;int size;};Stack_T* CreateStack();void StackPush(Stack_T* pStack, int num);int StackPop(Stack_T* pStack);int StackTop(Stack_T* pStack);int StackSize(Stack_T* pstack);
//stack.cpp#include "Header.h"using namespace std;Stack_T* CreateStack(){Stack_T *s = new Stack_T;// create a null node, not necessaryStackNode* p = new StackNode;p-》Data = 0;p-》pNext = NULL;s-》head = p;s-》size = 0;return s;}void StackPush(Stack_T* pStack, int num){assert(pStack != NULL);//create a new node, assign the address to the pointer of current nodeStackNode* p = new StackNode;p-》Data = num;p-》pNext = pStack-》head;pStack-》size++;pStack-》head = p;}int StackPop(Stack_T* pStack){assert(pStack != NULL&&pStack-》size 》 0);int n;StackNode* p = pStack-》head;n = p-》Data;pStack-》head = p-》pNext;pStack-》size--;delete p;return n;}int StackTop(Stack_T* pStack){assert(pStack != NULL&&pStack-》size 》 0);return pStack-》head-》Data;}int StackSize(Stack_T* pStack){assert(pStack != NULL);return pStack-》size;}void FreeStack(Stack_T* pStack){if (pStack == NULL){return;}StackNode* p = pStack-》head;//delete all the non-null node while (pStack-》head-》pNext != NULL){p = pStack-》head;pStack-》head = pStack-》head-》pNext;delete p;}delete pStack-》head;delete pStack;}void main(){int n;Stack_T *s = CreateStack();for (int i = 0; i 《 5; i++){StackPush(s,i);}for (int i = 0; i 《 5; i++){cout 《《 StackPop(s) 《《 " ";cout 《《 StackSize(s) 《《 "\n";}FreeStack(s);cin 》》 n;}
编程实现链栈的入栈和出栈操作 在线等着你哦!
#include《stdio.h》#include《stdlib.h》typedef struct Snode { int data;/*数据域*/ struct Snode *next;/*指针域*/ }SNODE,* LinkStack;/*其中SNODE为链栈中的结点类型名, LinkStack为指向结点的指针类型名*/ //////////////////LinkStack Push(LinkStack top,int e) /*将数据元素e压入到链栈top中,使其成为新的栈项元素*/ { LinkStack p; p=(LinkStack)malloc(sizeof(SNODE)); /*生成一个新的结点*/ if (!p) /*如果分配空间失败,则函数返回"OVERFLOW"*/ printf("Stack is Overflow\n"); p-》data=e; /*新结点的数据域赋值*/ p-》next=top; /*修改链使新结点插入到链表的头部,并成为新的栈顶元素*/ top=p; return top; } /////////////LinkStack Pop(LinkStack top, int * e) /*将链栈top中的栈顶元素从栈中删除,并用e返回其值*/ { LinkStack q; if (!top) /*如果栈空,则函数返回ERROR*/ printf("Stack is ERROR\n"); *e=top-》data; /*将被删的栈顶元素的值保存在e中*/ q=top; /*用q记下待删的栈顶元素*/ top=q-》next; /*修改链使待删结点从链中"卸下" ,此时被删结点的后继成为新的栈顶元素结点*/ free(q); /*释放被删结点的存储空间*/ return top;}/////////LinkStack Stack_display(LinkStack top){ int e; while(top) { e=top-》data; printf("%4d",e); top=top-》next; } return top;}/////////////////////void main(){ LinkStack top = 0; int i=0,n,e; printf("please input the length:");/*输入几个数*/ scanf("%d",&n); printf("please input the Value:\n");/*输入*/ while(i《n) { scanf("%d",&e); top=Push(top,e); i++; } printf("the stack is:\n"); Stack_display(top); printf("please input the insert node:"); scanf("%d",&e); top=Push(top,e); printf("the stack after push is:\n"); Stack_display(top); top=Pop(top,&e); printf("the pop value is:%d\n",e); printf("the stack after pop is:\n"); Stack_display(top); }
调好了麻烦采纳一下
高分悬赏!!![C++]利用链表构造一个堆栈类Stack
如果允许用标准库的话,或者你的链表能够提供如push_front(),pop_front(),或者push_back(),pop_back()中的任意一对和clear()函数,事情就好办了:简单的标准库版本:(只有四个函数,top())#include 《iostream》#include 《list》using namespace std;template 《typename Type》class Stack {public: void push(Type elem) { slist.push_back(elem); } void pop() { slist.pop_back(); } void clear() { slist.clear(); } Type top() { return slist.back(); }private: list《Type》 slist;}; int main (){ Stack《int》 st; st.push(2); st.push(3); st.pop(); cout 《《 st.top() 《《 endl;}自己编写的版本:(较为完善,empty(),size(),top()等都有)#include 《iostream》using namespace std;template 《class Type》 class Stack {private: struct Node;public: Stack():theSize(0), head(0) { } ~Stack(); size_t size() const; bool empty() const; void clear(); Type& top(); const Type& top() const; void push(const Type& x); void pop();private: Node* head; size_t theSize;};template 《class Type》 struct Stack《Type》::Node{ Node(const Type& i = Type(), Node* n = NULL) :item(i), next(n) { } Type item; Node* next;};template 《class Type》Stack《Type》::~Stack(){ while (head) { Node*temp = head; head = head-》next; delete temp; }}template 《class Type》size_t Stack《Type》::size() const{ return theSize;}template 《class Type》bool Stack《Type》::empty() const{ return theSize==0;}template 《class Type》void Stack《Type》::clear(){ while (head) { Node* temp; temp = head; head = head-》next; delete temp; } theSize = 0;}template 《class Type》Type& Stack《Type》::top(){ return head-》item;}template 《class Type》const Type& Stack《Type》::top() const{ return head-》item;}template 《class Type》void Stack《Type》::push(const Type& x){ Node* temp = head; head = new Node; head-》next = temp; head-》item = x; ++theSize;}template 《class Type》void Stack《Type》::pop(){ Node* temp = head; head = head-》next; delete temp; --theSize;}int main (){ Stack《int》 st; st.push(2); st.push(3); st.push(4); st.push(3); st.pop(); cout 《《 st.top() 《《 endl; cout 《《 st.size() 《《 endl; if (st.empty()) cout 《《 "empty" 《《 endl; else cout 《《 "not empty" 《《 endl; st.clear(); if (st.empty()) cout 《《 "empty" 《《 endl;}第二个,是我将以前的自己编的list头文件改编过来的,其中的push(),pop()分别取的是list中的pust_front(),pop_front()两个函数。用模板可能一些老编译器(包括VC6.0)编译不能通过,我的是在VC2008上运行的,当然你也可以再C++builder2009上运行,还有,如果你需要份文件运行,不要将Stack模板类的的定义和其成员的实现放在不同的文件里,因为很多很多编译器不支持export关键字,所以我也没用,当然主函数可以放在别的文件里。
本文相关文章:
链表堆栈的实现方法c语言(本人跪求C++程序-------设计一个堆栈)
2024年7月21日 14:54
链表堆栈的实现方法c语言(高分悬赏!!![C++]利用链表构造一个堆栈类Stack)
2024年7月19日 01:46
更多文章:
雨点qq聊天记录查看器(谁知道QQ的聊天记录是怎么组件做的JAVA可以吗)
2024年5月27日 08:21
ubuntu下载软件(ubuntu 下载软件时出现“装入归档文件时发生了错误“为什么)
2024年8月10日 18:41
内存卡数据恢复软件手机版(手机内存卡文件突然消失了 怎么恢复文件)
2024年9月6日 06:01
地瓜游戏中心 怎么匹配手机型号?地瓜游戏中心下载的安装包在哪
2024年6月19日 04:58
比特币跌破2万美元、1.9万币民遭血洗,究竟发生了什么?2022年12月16号比特币是涨还是跌
2024年7月11日 07:32
pp助手是干嘛的(pp助手是干什么用的有什么样的特色,没有root手机可以用吗)
2024年5月16日 18:29