利用栈来实现单链表的逆序

#include <stdio.h>
# include<stdlib.h>
#define stacksize 100
typedef int datatype;
typedef struct
{
   datatype data[stacksize];
        int  top;
}seqstack;
typedef struct node{
   datatype  data;
   struct node *next;
}listnode;
typedef listnode *linklist;
linklist head;
linklist p;
int count;
linklist creatlist(int n)
{
  linklist head;
  listnode *p1,*p2;
  int i;
  head=(linklist)malloc(sizeof(listnode));
  head->next=NULL;
  p2=head;
  printf("Please input the records of the chain!n");
  for(i=0;i<n;i++)
  {
     p1=(linklist)malloc(sizeof(listnode));
     scanf("%d",&p1->data);
     p1->next=p2->next;
     p2->next=p1;
     p2=p1;
  }
   return (head);
}
void print(linklist head,int n)
{
  if(head==NULL)
           printf("list null!n");
  printf("Now these %d records are:n",n);
  p=head->next;
  printf("%4d",p->data);
  count=1;
  while(p->next!=NULL)
  {
      count++;
      p=p->next;
      printf("%4d",p->data);
      if(!(count%10))
             printf("n");
  }
}
datatype push(seqstack *s,int x)  
 {
  if(s->top==stacksize-1)
       printf("The stack is overflow!n");
   else
             s->data[++s->top]=x;  
 }
datatype pop(seqstack *s) 
 {
   if(s->top==-1)
    printf("the stack is empty!n");
   else
           return (s->data[s->top--]);
 }

时间: 2024-09-13 20:27:13

利用栈来实现单链表的逆序的相关文章

link中是不是单链表不能逆序输出?只有双向链表才可以,这么说正确么?

问题描述 link中是不是单链表不能逆序输出?只有双向链表才可以,这么说正确么? link中是不是单链表不能逆序输出?只有双向链表才可以,这么说正确么? 解决方案 也可以啊,再定义一个堆栈,遍历链表,将值放进去,然后再输出堆栈.

java实现单链表之逆序_java

下面一段代码准确的介绍了java实现单链表逆序,具体内容就不做详解了,有需要的朋友可以直接拷贝了 package com.ckw.mianshi; /** * java 实现单链表的逆序 * @author Administrator * */ public class SingleLinkedReverse { class Node{ int data; Node next; public Node(int data){ this.data = data; } } public static

在C++数据结构中,关于单向链表的排序顺序控制,如何让单向链表按照逆序排列?

问题描述 在C++数据结构中,关于单向链表的排序顺序控制,如何让单向链表按照逆序排列? 在C++数据结构中,关于单向链表的排序顺序控制,如何让单向链表按照逆序排列? 解决方案 http://blog.163.com/lixiangqiu_9202/blog/static/53575037201187102524490/ if(p->next->data<q->next->data) -> if(p->next->data>q->next->

数据结构实践——单链表:逆置、连接与递增判断

本文针对数据结构基础系列网络课程(2):线性表的实践项目. [项目 - 单链表算法](程序中利用了已经实现的单链表算法,头文件LinkList.h及其中函数的实现见单链表算法库) 1.设计一个算法,将一个带头结点的数据域依次为a1,a2,-,an(n≥3)的单链表的所有结点逆置,即第一个结点的数据域变为an,-,最后一个结点的数据域为a1.实现这个算法,并完成测试. [参考解答] (程序中利用了已经实现的单链表算法,头文件LinkList.h及其中函数的实现见单链表算法库) #include <

单链表(二):如何实现单链表的排序、逆置(逆序)

1.单链表的排序 示例代码如下: #include<iostream> using namespace std; ///单链表结构体:结点 typedef struct student { int data; //结点中的数据 struct student *next; //指向链表下一个结点的指针 }node; node *head; //头结点指针 int index; //链表长度 ///建立单链表 void *create() { node *p,*s; //增加结点的位置指针.要增加

动态单链表的传统存储方式和10种常见操作-C语言实现

顺序线性表的优点:方便存取(随机的),特点是物理位置和逻辑为主都是连续的(相邻).但是也有不足,比如:前面的插入和删除算法,需要移动大量元素,浪费时间,那么链式线性表 (简称链表) 就能解决这个问题.   一般链表的存储方法 一组物理位置任意的存储单元来存放线性表的数据元素,当然物理位置可以连续,也可以不连续,或者离散的分配到内存中的任意位置上都是可以的.故链表的逻辑顺序和物理顺序不一定一样.   因为,链表的逻辑关系和物理关系没有必然联系,那么表示数据元素之间的逻辑映象就要使用指针,每一个存储

设计鲁棒性的方法:输入一个链表的头结点,逆序遍历打印该链表出来

之前有过整理链表等的概念和基本算法.比较重要的是插入,删除,遍历,建表(尾插法,头插法) 回忆链表尾部插入结点: 1 #include <iostream> 2 using namespace std; 3 4 typedef struct Node{ 5 int data;//数据域 6 Node *next;//指针域 7 } Node, *List; 8 9 //在单链表的末位添加一个结点 10 void addNode(List *head, int value) 11 { 12 //

Python 实现一个全面的单链表

前言 实现清单 链表实现 总结 前言 算法和数据结构是一个亘古不变的话题,作为一个程序员,掌握常用的数据结构实现是非常非常的有必要的. 实现清单 实现链表,本质上和语言是无关的.但是灵活度却和实现它的语言密切相关.今天用Python来实现一下,包含如下操作: ['addNode(self, data)'] ['append(self, value)'] ['prepend(self, value)'] ['insert(self, index, value)'] ['delNode(self,

Java模拟单链表和双端链表数据结构的实例讲解_java

模拟单链表 线性表: 线性表(亦作顺序表)是最基本.最简单.也是最常用的一种数据结构. 线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的. 线性表的逻辑结构简单,便于实现和操作. 在实际应用中,线性表都是以栈.队列.字符串等特殊线性表的形式来使用的. 线性结构的基本特征为: 1.集合中必存在唯一的一个"第一元素": 2.集合中必存在唯一的一个 "最后元素" : 3.除最后一个元素之外,均有 唯一的后继(后件):