目录

链表的应用:

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

"stack.h"

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. typedef struct tag{
  5. int m_ival;
  6. struct tag *next;
  7. }Node,*pNode;
  8. typedef struct{
  9. pNode phead;//栈顶指针
  10. int size;
  11. }Stack,*pStack;
  12. void initStack(pStack);
  13. void pop(pStack);
  14. void push(pStack,int);
  15. int top(pStack);
  16. int empty(pStack);
  17. int size(pStack);

"stack.c"

  1. #include "stack.h"
  2. void initStack(pStack p)
  3. {
  4. memset(p,0,sizeof(Stack));
  5. }
  6. void pop(pStack p)
  7. {
  8. if(!p->size)
  9. {
  10. printf("stack is empty\n");
  11. return;
  12. }
  13. p->phead=p->phead->next;
  14. p->size--;
  15. }
  16. void push(pStack p,int val)
  17. {
  18. pNode pNew=(pNode)calloc(1,sizeof(Node));
  19. pNew->m_ival=val;
  20. if(NULL==p->phead)
  21. {
  22. p->phead=pNew;
  23. }else{
  24. pNew->next=p->phead;//新结点的next指向原有头结点
  25. p->phead=pNew;
  26. }
  27. p->size++;
  28. }
  29. int top(pStack p)
  30. {
  31. return p->phead->m_ival;
  32. }
  33. int empty(pStack p)
  34. {
  35. return !p->size;
  36. }
  37. int size(pStack p)
  38. {
  39. return p->size;
  40. }

"main.c"

  1. #include "stack.h"
  2. int main() {
  3. Stack s;
  4. initStack(&s);
  5. push(&s, 5);
  6. push(&s, 10);
  7. printf("Stack size is %d\n", size(&s));
  8. printf("Stack top val is %d\n", top(&s));
  9. pop(&s);
  10. printf("Stack top val is %d\n", top(&s));
  11. pop(&s);
  12. pop(&s);
  13. return 0;
  14. }
循环队列

queue.h

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MaxSize 5
  4. typedef int ElemType;
  5. typedef struct{
  6. ElemType data[MaxSize];
  7. int front,rear;
  8. }SqQueue;
  9. void InitQueue(SqQueue*);
  10. int EnQueue(SqQueue*,ElemType);
  11. int DeQueue(SqQueue*,ElemType*);

queue.c

  1. #include "queue.h"
  2. void InitQueue(SqQueue* pq)
  3. {
  4. pq->front=pq->rear=0;
  5. }
  6. int EnQueue(SqQueue* pq,ElemType val)
  7. {
  8. if((pq->rear+1)%MaxSize==pq->front)
  9. {
  10. printf("queue is full\n");
  11. return 0;
  12. }
  13. pq->data[pq->rear]=val;
  14. pq->rear=(pq->rear+1)%MaxSize;
  15. return 1;
  16. }
  17. int DeQueue(SqQueue* pq,ElemType* x)
  18. {
  19. if(pq->rear==pq->front)
  20. {
  21. printf("queue is empty\n");
  22. return 0;
  23. }
  24. *x=pq->data[pq->front];
  25. pq->front=(pq->front+1)%MaxSize;
  26. return 1;
  27. }

main.c

  1. #include "queue.h"
  2. int main()
  3. {
  4. SqQueue q;
  5. ElemType val;
  6. InitQueue(&q);
  7. EnQueue(&q,10);
  8. EnQueue(&q,7);
  9. EnQueue(&q,5);
  10. EnQueue(&q,3);
  11. EnQueue(&q,9);
  12. DeQueue(&q,&val);
  13. system("pause");
  14. }
C语言实现动态数组
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. typedef struct{
  5. char *p;
  6. int size;//当前放了多少数据
  7. int capacity;//容量大小,申请了多少空间
  8. }DynArr;
  9. #define N 10
  10. int main()
  11. {
  12. DynArr d;
  13. int i=0;
  14. d.size=0;
  15. d.capacity=N;
  16. d.p=(char*)malloc(d.capacity);
  17. while(scanf("%c",d.p+d.size)!=EOF)
  18. {
  19. d.size++;
  20. if(d.size==d.capacity)
  21. {
  22. d.capacity=d.capacity*2;
  23. d.p=(char*)realloc(d.p,d.capacity);
  24. }
  25. }
  26. d.p[d.size-1]='\0';
  27. printf("%s\n",d.p);
  28. system("pause");
  29. }
队列实现不定元素个数层次建树 (*)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef char ElemType;
  4. typedef struct node{
  5. ElemType c;
  6. struct node *pleft;
  7. struct node *prgiht;
  8. }Node,*pNode;
  9. typedef struct que{
  10. pNode p;
  11. struct que *pNext;
  12. }Que_t,*pQue_t;
  13. //前序遍历
  14. void preOrder(pNode p)
  15. {
  16. if(p)
  17. {
  18. putchar(p->c);
  19. preOrder(p->pleft);
  20. preOrder(p->prgiht);
  21. }
  22. }
  23. int main()
  24. {
  25. ElemType c;
  26. pQue_t queHead=NULL,queTail=NULL,queNew,queFree;
  27. pNode treeRoot=NULL,treeNew;
  28. while(scanf("%c",&c)!=EOF)
  29. {
  30. if(c=='\n')
  31. {
  32. break;
  33. }
  34. treeNew=(pNode)calloc(1,sizeof(Node));//给树的新结点申请空间
  35. treeNew->c=c;
  36. queNew=(pQue_t)calloc(1,sizeof(Que_t));//给队列的新结点申请空间
  37. queNew->p=treeNew;
  38. if(!treeRoot)
  39. {
  40. treeRoot=treeNew;//第一个结点作为树根
  41. queHead=queTail=queNew;//第一个结点作为队列头
  42. }else{
  43. if(NULL==queHead->p->pleft)
  44. {
  45. queHead->p->pleft=treeNew;
  46. }else if(NULL==queHead->p->prgiht)
  47. {
  48. queHead->p->prgiht=treeNew;
  49. //头部删除法
  50. queFree=queHead;
  51. queHead=queHead->pNext;
  52. free(queFree);
  53. }
  54. //尾插法
  55. queTail->pNext=queNew;
  56. queTail=queNew;
  57. }
  58. }
  59. preOrder(treeRoot);
  60. printf("\n");
  61. system("pause");
  62. }
数组实现定长元素个数层次建树
  1. #include<stdio.h>
  2. #define N 10
  3. typedef char ElemType;
  4. typedef struct node {
  5. ElemType c;
  6. struct node *pleft;
  7. struct node *pright;
  8. }Node, *pNode;
  9. void preOrder(pNode p)
  10. {
  11. if (p)
  12. {
  13. putchar(p->c);
  14. preOrder(p->pleft);
  15. preOrder(p->pright);
  16. }
  17. }
  18. int main() {
  19. ElemType c[N + 1] = "ABCDEFGHIJ";
  20. int i, j;
  21. pNode p[N]; //结构体指针数组
  22. pNode root;
  23. for (i = 0;i < N;++i) {
  24. p[i] = (pNode)calloc(1, sizeof(Node));
  25. p[i]->c = c[i];
  26. }
  27. root = p[0];
  28. j = 0;
  29. for (i = 1;i < N;++i) {
  30. if (NULL == p[j]->pleft) {
  31. p[j]->pleft = p[i];
  32. }
  33. else if (NULL == p[j]->pright) {
  34. p[j]->pright = p[i];
  35. j++;
  36. }
  37. }
  38. preOrder(root);
  39. return 0;
  40. }

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. mysql中不直接通过密码连接 还要指定ip地址进行连接----------DCL数据库控制语言

    线上如果用root超级用户连接数据库,非常容易造成隐私泄漏.一般线上不用root数据控制. 今天和大家分享的是  输入密码还不可以连接数据库,必须要输入ip地址以后,才可以连接. 正常的访问数据库都是 ...

  2. Go Example--定时器

    package main import ( "fmt" "time" ) func main() { //定时器2s timer1 := time.NewTim ...

  3. 【jar包删除,再添加版本更高的jar】******.jar in project cnnot be read or is not a valid

    把4.2.0删除,然后添加其他版本的jar包

  4. (惊艳)对象序列化和反序列--Hibernate的查询和新增极其相似

    Hibernate几个关键字持久化,ORM(关系对象映射)(数据库中关系称作是一张表) 应用在项目中,刘一从写的查询代码,每次都挂掉,想要弄出测试数据,自己想着把查询出来的复杂数据弄到文件里自己要是去 ...

  5. centos7 添加第三方源

    第三方源下载地址: http://repoforge.org/use/ 选择合适自己包 我选择的是EL7的 wget 下载这个包 接着使用rpm -ivh 包名 确认是否添加成功 ls /etc/yu ...

  6. openresty 集成lua-resty-mail +smtp2http 扩展灵活的mail 服务

    lua-resty-mail 是一个不错的openresty mail 扩展,我们可以用来进行邮件发送,支持附件功能 smtp2http 是一个smtp 服务,可以将smtp 请求数据转换为http ...

  7. 解决winfrom下TextBox不支持透明背景色

    不知道微软扯什么拉鸡蛋子,居然有控件不支持透明,我实在想喷设计的人脑残.尤其可恨的是TextBox不支持,更可恨的是直到最新版.net4.6也不支持.源码又看不见,具体实现细节都不知道,谁能改得动?这 ...

  8. 论 数据库 B Tree 索引 在 固态硬盘 上 的 离散存储

    传统的做法 , 数据库 的 B Tree 索引 在 磁盘上是 顺序存储 的 , 这是考虑到 磁盘 机械读写 的 特性 . 实际上 , B Tree 是一个 树形结构 , 可以采用 链式 存储 , 就是 ...

  9. AI update

    1, labeling工具 - 测试完成 使用fiji + Alps_Labeling_Tool.ijm 做labeling 生成的文件可以使用python读取 2,training -未开始 使用t ...

  10. mysql之 mysql_config_editor/login-path 登录密码保护

    login-path是MySQL5.6开始支持的新特性.通过借助mysql_config_editor工具将登陆MySQL服务的认证信息加密保存在.mylogin.cnf文件(默认位于用户主目录) . ...