【算法设计-链栈和链队列】链栈和链队列的实现

1.链队列。利用带有头结点的单链表来实现链队列,插入和删除的复杂度都为o(1)

代码:

#include<stdio.h>

#include<stdlib.h>

typedef struct Qnode

{

int data;

Qnode *next;

}Qnode;

typedef struct LinkQueue

{

Qnode *front;

Qnode *rear;

}LinkQueue;

void initialize(LinkQueue *LinkQueue)

{

LinkQueue->rear=(Qnode*)malloc(sizeof(Qnode));

LinkQueue->front=LinkQueue->rear;

LinkQueue->front->next=NULL;

}

void ENQUEUE(LinkQueue *LinkQueue)

{

Qnode* temp=(Qnode *)malloc(sizeof(Qnode));

printf("插入的数值?\n");

scanf("%d",&temp->data);

temp->next=NULL;

LinkQueue->rear->next=temp;

LinkQueue->rear=temp;

}

void show_queue(LinkQueue *LinkQueue1)

{

Qnode *temp=LinkQueue1->front;

while(temp->next!=NULL)

{

printf("%d,",temp->next->data);

temp=temp->next;

}

printf("\n");

}

void DEQUEUE(LinkQueue *LinkQueue)

{

printf("要删除队列的第一个结点%d\n",LinkQueue->front->next->data);

Qnode *temp=LinkQueue->front;

LinkQueue->front=temp->next;

free(temp);

}

int main(void)

{

LinkQueue *LinkQueue1;

LinkQueue1=(LinkQueue *)malloc(sizeof(LinkQueue));

initialize(LinkQueue1);

ENQUEUE(LinkQueue1);

ENQUEUE(LinkQueue1);

ENQUEUE(LinkQueue1);

show_queue(LinkQueue1);

DEQUEUE(LinkQueue1);

show_queue(LinkQueue1);

DEQUEUE(LinkQueue1);

show_queue(LinkQueue1);

DEQUEUE(LinkQueue1);

return 0;

}

结果展示:

2.链栈的实现

利用含有头结点的单链表来实现,插入和删除的复杂度都为o(1)

#include<stdio.h>

#include<stdlib.h>

typedef long ElemType;

typedef struct stack

{

ElemType data;

struct stack* next;

}STACK;

void initialize(STACK*);

void add(STACK*);

void delete_s(STACK*);

void get_top(STACK*);

void initialize(STACK* top)

{

top->next = NULL;//这里的top就相当于一个头结点指针。这个是头节点!!!!

}

void add(STACK* top)

{

ElemType m;

puts("请问您想插入的数字是?\n");

scanf("%d", &m);

STACK* temp;

temp = (STACK*)malloc(sizeof(STACK));

temp->data = m;

temp->next = top->next;

top->next = temp;

}

void delete_s(STACK* top)

{

ElemType value;

STACK* temp;

temp = top->next;

value = top->next->data;

top->next = temp->next;

free(temp);

printf("删除了%d\n",value);

}

void get_top(STACK* top)

{

printf("栈顶是%d",top->next->data);

}

int main(void)

{

STACK top;

initialize(&top);

int choice;

while (1)//注意因为下面利用了switch所以不能应用c primer plus第八章中的getchar()与scanf组合的方法。

{

printf("按下列选项选择您要进行的操作\n");

printf("1.添加数字\n");

printf("2.删除数字\n");

printf("3.显示栈顶\n");

printf("4.退出\n");

scanf_s("%d",&choice);

switch (choice)

{

case 1:

add(&top); break;

case 2:

delete_s(&top); break;

case 3:

get_top(&top); break;

case 4:

return 0;

default:

break;

}

}

printf("谢谢您的使用!\n");

}

时间: 2024-08-08 01:14:55

【算法设计-链栈和链队列】链栈和链队列的实现的相关文章

栈的链式存储结构和入栈出栈操作

参考<大话数据结构>P98~99——栈的链式存储结构. 进栈: 出栈: 举个简单的例子: 代码和解释如下(VS2012测试通过): 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 typedef string status;//用书上推荐的status返回是否成功,C++中的模板类string比字符数组char[]更方便 6 7 //栈的结点 8 //包含data,和指向下一个结点

队列的实现:链式队列

队列常常也使用链式存储的方式来实现.为了方便操作,同顺序存储一样,我们要维护一个头指针和一个尾指针.如下图: 在链式队列中显然不会出现假溢出的情况.但在出队时,要及时释放内存.由于在队列的实现:顺序队列中,对队列的描述已经很清楚了.就闲话不多说,直接上代码: 类定义和类实现 #include<iostream> #include<iomanip> using namespace std; typedef int ELemType; class QNode //节点类型 { publ

C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)

/**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋值*/ #include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#define OK 1#define ERROR 0#define NAMESIZE 255//字符串的最大长度

队列的基本操作(链队列)

队列和栈差不多,唯一的区别就是栈式先进后出(FILO),队列是先进先出(FIFO),队列的示意图如下 其基本操作的代码如下 #include<iostream> #include<cstdlib> using namespace std; struct QNode{ int data; QNode *next; }; typedef QNode *QueuePtr; struct LinkQueue{ QueuePtr front; QueuePtr rear; }; //初始化队

Java数据结构系列之——队列(3):队列的链式存储结构及其实现

package queue.linkQueue; public class Node { // 数据域 Object element; // 指针域 Node next; // 头结点初始化 public Node(Node next) { this.next = next; } // 非头结点初始化 public Node(Object element, Node next) { this.element = element; this.next = next; } } ***********

数据结构与算法之队列、栈

除了数组.链表,线性的数据结构中还有很重要的几种结构:队列.栈. 队列,一种先进先出的数据结构(FIFO),其实队列可以看成是一个两个口的管道,从一个口进,另一个口出,先进去的必定得在另一个口先出去,否则后面的都出不去:栈,一种后进先出的数据结构(LIFO),栈更像是只有一个口的管道,只有一个开口可以进出,先进去的在底部,所以必须得让后进去的先出去,它才能出去. 实现队列和栈可以用顺序存储结构,也可以用链式存储结构.这里采用的是链表来实现,同时还有用两个栈实现一个队列和用两个队列实现一个栈的算法

迅雷链张骁:区块链是信任基石,密码学是区块链基石

在12月22日举行的迅雷链技术沙龙成都站上,迅雷链底层研发工程师张骁就区块链安全问题和密码学的关系做了主题分享,受到了现场开发者的踊跃提问.大家普遍对密码学及信任体系的架构表现出了浓厚的兴趣.张骁表示,区块链之所以能够解决人与人之间的信任问题,是因为它的不可篡改性,而这种特性本质上又是基于密码学算法来实现的.因此密码学在区块链中的地位很关键,区块链是信任的基石,密码学则是区块链的基石. 密码学核心技术特点 张骁首先解释从密码学的角度分析"安全"的含义,他将其总结为三个方面. 1.机密性

调用链系列(2):轻调用链实现

一.前言 宜信开源|调用链系列(1):解读UAVStack中的贪吃蛇 上篇文章分享了一下调用链的模型设计及模型时序图.相信大家通过上一篇文章对调用链有了一个整体上的了解,如:调用链是什么.能做什么及整体实现策略. 这篇文章我们继续介绍调用链的服务端信息收集以及服务间上下文传递. 二.服务端信息收集 服务端信息收集整体流程如下图所示,通过在应用容器(tomcat等)启动过程中植入切点从而实现在应用逻辑执行之前和之后对请求进行劫持. 应用逻辑执行之前:解析request中调用链信息,并初始化调用链上

链家终于出事了!细数链家金融帝国四宗罪!

摘要说明:高速扩张的链家,在一个敏感时刻,遭到上海政府的迎头一棒.2月24日晚间,有人发现,链家门店橱窗上黏贴的所有二手房房源全部消失了,剩下的是 高速扩张的链家,在一个敏感时刻,遭到上海政府的迎头一棒. 2月24日晚间,有人发现,链家门店橱窗上黏贴的所有二手房房源全部消失了,剩下的是一张张白板.随即,澎湃新闻记者走访了附近链家门店,发现门店原先黏贴在橱窗上的房源确实没有了. 上海市,链家房产枣阳路店,一位工作人员正在关门收工,门口两侧橱窗上的广告已经撤下. 澎湃新闻记者 高征 图 界面新闻还透

C语言算法系列---1.队列和栈

写在前面:在家玩了好久,实在是不知道干嘛了,突然想找些事做,现在是时候做些什么了.这些东西不见得多高深,也可能很简单,但很基础,也无法忽视.同时,也是自己学习走过的一条路. 这是开头,就写写C的队列和栈的一些算法吧. 首先是栈的一些基础功能的实现,先贴代码: #include<stdlib.h> #include<stdio.h> typedef int SElemType; //声明栈元素类型为int typedef int Status; //函数返回值的类型为int #def