求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...... 晚上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->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; }... 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; }关于JAVA数据结构堆栈用链表实现的问题 想问问入栈代码的作用就是代码功能怎么实现的 不要把思
假定栈用单链表的存储结构表示,栈的栈顶指针为top,进行退栈时执行的操作
借助栈实现单链表上的逆置运算
怎样用链表实现一个堆栈? 请用完整的程序作答 谢谢~
java用链表实现栈 40分