【算法设计-链栈和链队列】链栈和链队列的实现
来源:互联网 发布:手机画衣柜软件 编辑:程序博客网 时间:2024/06/05 16:03
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");
}
- 【算法设计-链栈和链队列】链栈和链队列的实现
- 队列的实现-顺序队列和链队列
- 算法#07--背包、队列和栈(链表实现)
- 实验3:栈和队列的基本操作实现及其应用——顺序队列和链队列
- C++实现链栈和链式队列
- [算法拾遗]栈和队列的实现
- 链队列——队列的链式表示和实现
- 链队列-队列的链式表示和实现
- 链队列--队列的链式表示和实现
- 队列的链式表示和实现----单链队列
- 链队列---队列的链式表示和实现
- 顺序队列和链队列的实现(实验3.2)
- 循环队列和链队列
- 循环队列和链队列
- 顺序队列和链队列
- 数据结构编程笔记九:第三章 栈和队列 链队列的实现
- 实验4:栈和队列的基本操作实现及其应用——链队列
- 实验4:栈和队列的基本操作实现及其应用之《链队列》
- JSP页面中Session对象详解
- 注册XPCOM组件到Gecko17
- 动态代理和AOP切面编程
- TheFirstOne
- XPCOM指南-3_组件的内部结构
- 【算法设计-链栈和链队列】链栈和链队列的实现
- shiro的一点记录
- 计算几何 || 半平面交
- XPCOM指南-4_创建组件的代码
- week11---5月14日
- JQuery方向意识悬停 HoverDir
- 泛型
- android popwindow仿微信右上角弹出框,dialog底部显示
- HDU 4876 ZCC loves cards【暴力+深搜+剪枝】