目录

链表的应用:

  • 循环队列
  • C语言实现动态数组
  • 数组实现定长元素个数层次建树
  • 队列实现不定元素个数层次建树 (*)
栈(链表应用)

"stack.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct tag{
int m_ival;
struct tag *next;
}Node,*pNode; typedef struct{
pNode phead;//栈顶指针
int size;
}Stack,*pStack; void initStack(pStack);
void pop(pStack);
void push(pStack,int);
int top(pStack);
int empty(pStack);
int size(pStack);

"stack.c"

#include "stack.h"

void initStack(pStack p)
{
memset(p,0,sizeof(Stack));
}
void pop(pStack p)
{
if(!p->size)
{
printf("stack is empty\n");
return;
}
p->phead=p->phead->next;
p->size--;
}
void push(pStack p,int val)
{
pNode pNew=(pNode)calloc(1,sizeof(Node));
pNew->m_ival=val;
if(NULL==p->phead)
{
p->phead=pNew;
}else{
pNew->next=p->phead;//新结点的next指向原有头结点
p->phead=pNew;
}
p->size++;
}
int top(pStack p)
{
return p->phead->m_ival;
}
int empty(pStack p)
{
return !p->size;
}
int size(pStack p)
{
return p->size;
}

"main.c"

#include "stack.h"

int main() {
Stack s;
initStack(&s);
push(&s, 5);
push(&s, 10);
printf("Stack size is %d\n", size(&s));
printf("Stack top val is %d\n", top(&s));
pop(&s);
printf("Stack top val is %d\n", top(&s));
pop(&s);
pop(&s);
return 0;
}
循环队列

queue.h

#include <stdio.h>
#include <stdlib.h> #define MaxSize 5
typedef int ElemType;
typedef struct{
ElemType data[MaxSize];
int front,rear;
}SqQueue; void InitQueue(SqQueue*);
int EnQueue(SqQueue*,ElemType);
int DeQueue(SqQueue*,ElemType*);

queue.c

#include "queue.h"

void InitQueue(SqQueue* pq)
{
pq->front=pq->rear=0;
} int EnQueue(SqQueue* pq,ElemType val)
{
if((pq->rear+1)%MaxSize==pq->front)
{
printf("queue is full\n");
return 0;
}
pq->data[pq->rear]=val;
pq->rear=(pq->rear+1)%MaxSize;
return 1;
}
int DeQueue(SqQueue* pq,ElemType* x)
{
if(pq->rear==pq->front)
{
printf("queue is empty\n");
return 0;
}
*x=pq->data[pq->front];
pq->front=(pq->front+1)%MaxSize;
return 1;
}

main.c

#include "queue.h"

int main()
{
SqQueue q;
ElemType val;
InitQueue(&q);
EnQueue(&q,10);
EnQueue(&q,7);
EnQueue(&q,5);
EnQueue(&q,3);
EnQueue(&q,9);
DeQueue(&q,&val);
system("pause");
}
C语言实现动态数组
#include <stdio.h>
#include <stdlib.h>
#include <string.h> typedef struct{
char *p;
int size;//当前放了多少数据
int capacity;//容量大小,申请了多少空间
}DynArr; #define N 10
int main()
{
DynArr d;
int i=0;
d.size=0;
d.capacity=N;
d.p=(char*)malloc(d.capacity);
while(scanf("%c",d.p+d.size)!=EOF)
{
d.size++;
if(d.size==d.capacity)
{
d.capacity=d.capacity*2;
d.p=(char*)realloc(d.p,d.capacity);
}
}
d.p[d.size-1]='\0';
printf("%s\n",d.p);
system("pause");
}
队列实现不定元素个数层次建树 (*)
#include <stdio.h>
#include <stdlib.h> typedef char ElemType;
typedef struct node{
ElemType c;
struct node *pleft;
struct node *prgiht;
}Node,*pNode; typedef struct que{
pNode p;
struct que *pNext;
}Que_t,*pQue_t; //前序遍历
void preOrder(pNode p)
{
if(p)
{
putchar(p->c);
preOrder(p->pleft);
preOrder(p->prgiht);
}
}
int main()
{
ElemType c;
pQue_t queHead=NULL,queTail=NULL,queNew,queFree;
pNode treeRoot=NULL,treeNew;
while(scanf("%c",&c)!=EOF)
{
if(c=='\n')
{
break;
}
treeNew=(pNode)calloc(1,sizeof(Node));//给树的新结点申请空间
treeNew->c=c;
queNew=(pQue_t)calloc(1,sizeof(Que_t));//给队列的新结点申请空间
queNew->p=treeNew;
if(!treeRoot)
{
treeRoot=treeNew;//第一个结点作为树根
queHead=queTail=queNew;//第一个结点作为队列头
}else{ if(NULL==queHead->p->pleft)
{
queHead->p->pleft=treeNew;
}else if(NULL==queHead->p->prgiht)
{
queHead->p->prgiht=treeNew;
//头部删除法
queFree=queHead;
queHead=queHead->pNext;
free(queFree);
}
//尾插法
queTail->pNext=queNew;
queTail=queNew;
}
}
preOrder(treeRoot);
printf("\n");
system("pause");
}
数组实现定长元素个数层次建树
#include<stdio.h>
#define N 10 typedef char ElemType;
typedef struct node {
ElemType c;
struct node *pleft;
struct node *pright;
}Node, *pNode; void preOrder(pNode p)
{
if (p)
{
putchar(p->c);
preOrder(p->pleft);
preOrder(p->pright);
}
} int main() {
ElemType c[N + 1] = "ABCDEFGHIJ";
int i, j;
pNode p[N]; //结构体指针数组
pNode root;
for (i = 0;i < N;++i) {
p[i] = (pNode)calloc(1, sizeof(Node));
p[i]->c = c[i];
}
root = p[0];
j = 0;
for (i = 1;i < N;++i) {
if (NULL == p[j]->pleft) {
p[j]->pleft = p[i];
}
else if (NULL == p[j]->pright) {
p[j]->pright = p[i];
j++;
}
}
preOrder(root);
return 0;
}

C语言强化——链表(2)的更多相关文章

  1. C语言强化——链表(1)

    目录 链表的增删(不带头结点) 链表相关面试题 合并两个有序链表 单链表原地逆置 找出链表的倒数第四个节点 找出链表的中间节点 判断单链表是否有环 求链表交点 删除有序单链表中重复的元素 链表按奇数. ...

  2. C语言之链表

    这两天在复习C语言的知识,为了给下个阶段学习OC做准备,以下的代码的编译运行环境是Xcode5.0版本,写篇博文把昨天复习的C语言有关链表的知识给大家分享一下,以下是小菜自己总结的内容,代码也是按照自 ...

  3. C语言习题 链表建立,插入,删除,输出

    Problem B: C语言习题 链表建立,插入,删除,输出 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 222  Solved: 92 [Subm ...

  4. YTU 2430: C语言习题 链表建立,插入,删除,输出

    2430: C语言习题 链表建立,插入,删除,输出 时间限制: 1 Sec  内存限制: 128 MB 提交: 576  解决: 280 题目描述 编写一个函数creatlink,用来建立一个动态链表 ...

  5. 关于c语言单项链表尾添加

    犹豫了几天,看了很多大牛写的关于c语言链表,感触很多,终于下定决心,把自己对于链表的理解随之附上,可用与否,自行裁夺.由于作者水平有限也是第一次写,不足之处,竭诚希望得到各位大神的批评指正.制作不易, ...

  6. C语言之链表list

    #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h& ...

  7. C语言:链表实现的一个实例

    问题:写一个程序输入你一年看过的所有电影以及每部电影的各种信息(简化问题:每部电影只要求输入片名和评价) 链表实现: #include<stdio.h> #include<stdli ...

  8. C语言单链表实现19个功能完全详解

    谢谢Lee.Kevin分享了这篇文章 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将 ...

  9. (转)c语言_链表实例讲解(两个经典例子)

    建立一个学生成绩的线性链表,对其实现插入,删除,输出,最后销毁. #include <stdio.h>#include <stdlib.h> struct grade {    ...

随机推荐

  1. python 字符串,列表,元组,字典相互转换

    1.字典 dict = {'name': 'Zara', 'age': 7, 'class': 'First'} 字典转为字符串,返回:<type 'str'> {'age': 7, 'n ...

  2. 【mybatis源码学习】mybatis和spring框架整合,我们依赖的mapper的接口真相

    转载至:https://www.cnblogs.com/jpfss/p/7799806.html Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注 ...

  3. vue 插件tab选项卡(转载)

    <template> <tab :options="tabOpt" :state.sync="stateIndex"></tab& ...

  4. Mosaic 前端微服务框架

    Mosaic 是一系列的服务.库,集成在一起,定义了组件如何彼此交互,可以用来支持大规模的web 站点开发 一张架构图 说明 尽管上图中的一些组件已经迭代演化了(skipper 的route 配置,上 ...

  5. Unity5 图形系统介绍 学习

  6. 网易的Airtest

    使用心得:https://testerhome.com/topics/12391 下载路径:https://airtest.netease.com/

  7. linux之 sed命令

    1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区 ...

  8. this、new,容易混淆的地方

    this.new,容易混淆的地方 情况1 关系 情况2 new Foo() 等价于,推荐的写法是new Foo() new Foo new Foo() 不一样 Foo(), Foo()这种情况下,构造 ...

  9. ts项目报错:Import sources within a group must be alphabetized

    报错:Import sources within a group must be alphabetized. 原因:import名称排序问题,要求按照字母从小到大排序:修改 tslint.json 中 ...

  10. [c/c++]可变参数的使用

    一.可变参数简介 当一个函数需要传递未知个数的参数时,就需要用到可变参数, 比如常见的printf()函数,输出多个变量: printf("print para1:%d ,para2 :%d ...