| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3831 人关注过本帖
标题:[求助]栈的插入与删除?
只看楼主 加入收藏
csz88999
Rank: 1
来 自:云南
等 级:新手上路
帖 子:45
专家分:0
注 册:2007-6-1
收藏
得分:0 

这个算法我知道,但是我主要不知道要怎么组织用具体数据来实现它们的插入和删除,我觉得知道算法后要真正把它写清楚还是很难!


2007-10-15 16:31
鸿工作室
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2007-10-14
收藏
得分:0 
以下是引用csz88999在2007-10-15 16:31:50的发言:

这个算法我知道,但是我主要不知道要怎么组织用具体数据来实现它们的插入和删除,我觉得知道算法后要真正把它写清楚还是很难!

算法?!怎么会用到具体数据来实现呢?算法是用语言来实现的吧?!




2007-10-15 17:01
csz88999
Rank: 1
来 自:云南
等 级:新手上路
帖 子:45
专家分:0
注 册:2007-6-1
收藏
得分:0 

是呀,算法就是解决它的主要步骤吧!但是我想要用具体数据来实现它的插入与删除,要有输入与输出 ,我觉得这个太难了,我做出来的总是有错误,能帮我设计一个吗?


2007-10-16 09:23
wangtuan7788
Rank: 1
等 级:新手上路
帖 子:286
专家分:0
注 册:2007-10-8
收藏
得分:0 

你笑我和你们不一样,我笑你们大家都一样~
2007-10-16 12:40
yangzhifu
Rank: 1
等 级:新手上路
威 望:2
帖 子:433
专家分:0
注 册:2007-4-11
收藏
得分:0 

有错误自己改,实在不行了再找人,要不依赖就太大了


方寸之内,剖天下; 方坛之内,析自我;
2007-10-16 18:51
ascend_0707
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-10-16
收藏
得分:0 
和气些
我们是来学习的啊
2007-10-17 09:07
hjlwlyhjl
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2006-12-6
收藏
得分:0 

#include <malloc.h>
#include <stdio.h>
/*定义栈中的节点*/
typedef struct Node{
int nodeData;
struct Node *next;
}stackNode;
/*定义指向栈顶的指针与记录元素个数的变量*/

typedef struct{
stackNode *top;
int numbers;
}stackModel;

stackModel *p;
/*初始化栈*/

void initialize(stackNode *head){
head = NULL;
p->top = head;
p->numbers = 0;
}
/*元素进栈*/
void push(int node,stackNode *head){
stackNode *temp;
temp = (stackNode *)malloc(sizeof(stackNode));
temp->nodeData = node;

if(head==NULL)
{
head = temp;
temp->next = NULL;
}
else{
temp->next = head;
head = temp;
}

p->top = head;
p->numbers ++;
}
/*元素出栈*/

void pop(stackNode *head){
if(p->numbers <= 0)
{
printf(" the stack is empty!");
}
else{
head = head->next;
p->top = head;
p->numbers --;
}
}

main()
{
stackNode *head;
stackNode *temp;

initialize(head);
push(2,p->top);
push(2,p->top);
push(4,p->top);
pop(p->top);
printf("栈中元素个数: %d\n",p->numbers);
temp = p->top;
while(temp!=NULL)
{
printf("%d\n",temp->nodeData);
temp = temp->next;
}

}

此栈是用链表实现的,其出栈与入栈以及怎么被调用基本上如上所示。原理其实很简单,只要把栈看成特殊的链表,再用一个指针指向连头,所有的操作从该指针指向的链头操作就行了!
还要忠告你一句,学习要善于思考,不要靠着别人把所有的东西一步一步地教给你,这是不可取的。


2007-10-17 16:03
csz88999
Rank: 1
来 自:云南
等 级:新手上路
帖 子:45
专家分:0
注 册:2007-6-1
收藏
得分:0 

呵呵,是呀,我也有思考,只是没思考出来!唉!郁闷.
谢谢大家对我的忠告,谢谢大家帮忙!


2007-10-18 09:02
紫色荼蘼812
Rank: 1
等 级:新手上路
帖 子:7
专家分:7
注 册:2011-6-1
收藏
得分:0 
typedef int SElemType;
typedef struct{
    SElemType *base;
    SElemType *top;
    int stracksize;
}SqStack;
#define STACK_INT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define OVERFLOW -1
#define ERROR 0
typedef int Status;
#include <malloc.h>
#include <stdio.h>

Status InitStack(SqStack &s)
{
    s.base=(SElemType *)malloc
        (STACK_INIT_SIZE * sizeof(SElemType));
    if (!s.base) return (OVERFLOW);
    s.top=s.base;
    s.stacksize = STACK_INIT_SIZE;
    return OK;
}/*InitStack*/



Status Push(SqStack &s,SElemType e)
{
    SElemType *l_temp;
    if (s.top-s.base>=s.stacksize)
    {
        l_temp=(SElemType *)realloc
            (s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType));
        if(!l_temp) return (OVERFLOW);
        s.base=l_temp;
        S.top=s.base+s.stacksize;
        s.stacksize+=STACKINCREMENT;
    }
    *(s.top++)=e;
    return OK;
}/*Push*/


Status Pop(SqStack &s,SElemType &e)
{
    if (s.top==s.base)  return ERROR;
    e=*(--s.top);
    return OK;
}/*Pop*/

int StackEmpty (SqStack s)
{
    if(s.base==s.top) return 1;
    else return 0;
}

void conversion ()
{
    SqStack s;
    int N,b;
    SElemType e;
   

    InitStack(s);
    scanf("%d %d",&N,&b);
    while (b>=2 && N)
    {
        Push(S,N%b);
        N=N/b;
    }

    while (!StackEmpty(s))
    {
        Pop(s,e);
        printf("%d",e);
    }
}/*conversion*/

void main (void)
{
    conversion();
}
你再调试一下,好像有写地方有打错字母的
2011-06-08 13:47
快速回复:[求助]栈的插入与删除?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018842 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved