栈的链表实现

求C语言程序实例,链表实现堆栈的操作

/*创建链表数据结构*/

typedef struct s {

int d;

struct s *next;

}stack;

/*定义栈顶指针*/stack *top=NULL;

/*进栈*/

void push(int i)

{

stack *ps=(stack*)malloc(sizeof(stack));

ps->d = i;

ps->next = top;

top=ps;

}

/*出栈*/

void pop()

{

if(!top)

return;

stac郸 *temp = top;

top = top->next;

free(temp);

}

/*主函数*/

int main()

{

//实现栈操作的代码

}

用C语言中的链表如何实现栈?

struct point{

point *last;

int data;

};

int main(){

cin >> n;

point *top = NULL;

for(int i = 1 ; i <= n ; i++){

scanf("%d" , &x);

point *p = new point;

p -> data = x; //入栈

p -> last = top;

top = p; // 将头指针指向最后一个

}

while (top != NULL){//判断栈是否为空

cout << top -> data << endl; //输出栈顶元素

top = top -> last; //将头指针向下移动

}

}

链表,队列和栈的区别

链表是一种存储结构,指的是存储时候除了要存储数据元素外,还要用数据元素一起的另外空间存储数据元素的关系

队列和栈都是线性表,属于逻辑结构范畴,都是访问点受到限制,并且限制在线性表端点的线性表

栈被限定为在线性表的同一个(唯一的一个)端点插入删除

队列被限定为在线性表的一端插入,另外一个端点删除

栈和队列也可以用链表实现,分别称为链栈和链队列

栈是不是即可以由链表实现,也可以由数组实现??

是的,但在栈的最大值已确定的情况下,用数组实现的开销最小。

设计一个整数链表类,满足栈操作。即,总在链表首插入结点,总在链表首取出(删除)结点。

#include

#inclu禒e

#include

using namespace std;

int data[100];//放数据

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 ! "<

}

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[i]=rand()%191+10;

for(i=0;i<100;i++)

{

if(i==0) this->creat(data[i]);

else

{

if(data[i]>data[i-1])

this->creat(data[i]);//调用创建链表的函数

}

}

}

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<

}

int main()

{

INT KK......

关于JAVA数据结构堆栈用链表实现的问题 想问问入栈代码的作用就是代码功能怎么实现的 不要把思

晚上3点还在学习,你也真是蛮拼的。

不知道你Node的代码是怎样的,getNext和setNext方法具体内容。姑且按你说的,head为null,Next为下一Node节点来说吧。(其实我觉得setNext应该是set data的值才对,不是Next。不过没所谓了。按你假设的来说吧)

初始化时,MyLinkedStack中的head如下:head.data=null, head.next=null;

然后第一次入栈,倒数第三行时,n如下:n.data=data, n.next=null;

倒数第二行的head链如下:head.data=null, head.next=n;

若是有再次入栈,我设Node对象为n1,然后数据为data1吧。那n1新建的时候也是:n1.data=data1, n1.next=null;

倒数第三行的n1如下:n1.data=data1, n1.next=n;

倒数第二行的head链如下:head.data=null, head.next=n1, n1.next=n;

当然,这是不知道你getNext和setNext具体代码的情况下,我觉得是head.data=n1, head.next=n;这样才好的。重点来了:栈是后进先出的。

假定栈用单链表的存储结构表示,栈的栈顶指针为top,进行退栈时执行的操作

top->next指向栈顶,top->next->next指向栈顶第二个元素,现在要退栈就是移除栈顶元素,而第二个元素现在变成了栈顶元素了,所以选D

借助栈实现单链表上的逆置运算

#include

struct node{

int data;

struct node *next;

};

typedef struct node stack_node;

typedef stack_node *link;

link stack=NULL;

void push(int data){

link newnode;

newnode=(link)malloc(sizeof(stack_node));

newnode->data=data;

newnode->next=stack;

stack=newnode郸

}

int pop(){

link top;

int temp;

if(stack!=NULL){

top=stack;

stack=stack->next;

temp=top->data;

free(top);

return temp;

}

else

return -1;

}

main(){

int i,random,out,value;

int a[20];

i=0;

printf("输入需要逆序的序列,按0结束输入\n");

scanf("%d",&value);

push(value);

while(value){

i++;

scanf("%d",&value);

push(value);

}

for(out=0;out

random=pop();

printf("%d",random);

}

}

怎样用链表实现一个堆栈? 请用完整的程序作答 谢谢~

代码段如下,望参考!

#include

typedef int datatype;

typedef struct linknode

{

datatype data;

struct linknode *next;

}linknode;

//堆栈的创建

linknode * linkstack_create()

{

linknode *L;

L = (linknode *)malloc(sizeof(linknode));

L->next = NULL;

return L;

}

//入栈

int linkstack_push(linknode *L,datatype x)

{

linknode *p,*q=L;

p = (linknode *)malloc(sizeof(linknode));

p->data = x;

p->next = q->next;

q->next = p;

return 0;

}

//出栈

int linkstack_pop(linknode *L,datatype *x)

{

linknode *p=L,*q;

if(p->next == NULL)

return -1;

q = p->next;

p->next = q->next;

*x = q->data;

free(q);

q = NULL;

return 0;

}

//堆栈遍历

void linkstack_display(linknode *L)

{

linknode *p=L->nex浮;

while(p)

{

printf("%d ",p->data);

p = p->next;

}

}

int main()

{

linknode *L;

int a[]={1,3,5,7,9};

int i,ret;

L = linkstack_create();

for(i = 0; i

linkstack_push(L,a[i]);

linkstack_display(L);

printf("\n");

linkstack_pop(L,&ret);

printf("ret : %d\n",ret);

return 0;

}...

java用链表实现栈 40分

public Object setEle(Obje川t element)

{

Object oldElement = this.element;

this.element = element;

return oldElement;

}

是啥意思,给值还return??把这函数删了

public Linked()

{

nextNode = null;

element = null;

}

改成

public Linked(Object element)

{

this.element = element;

nextNode = null;

}

扫一扫手机访问

发表评论