4585浏览
查看: 4585|回复: 3

[教程] 顺序表创建以及操作

[复制链接]
  1. /*************************顺序表的创建以及使用**********************************/
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #define MAXLISTSIZE 1024  /* 定义顺序表最大容量 */
  5. /********************定义顺序表******************************/
  6. typedef struct  /* 定义顺序表节点类型 */
  7. {
  8.   int data[MAXLISTSIZE];  /* 顺序表*/
  9.   int last; /*顺序表元素个数 */
  10. }linearlist;
  11. /***********************打印顺序表***************************/
  12. void ListList(linearlist* list) /* 打印线性顺序表 */
  13. {
  14.   int i;
  15.   printf("当前线性表的状态:\n");
  16.   if(list -> last == 0) /*顺序表为空*/
  17.     printf("当前顺序表为空");
  18.   else
  19.     for(i = 0; i < (list -> last); i++) /*循环遍历顺序表*/
  20.       printf("[%4d]", list -> data[i]); /*输出元素*/
  21.   printf("\n");
  22. }
  23. /**************************打印说明文档************************/
  24. void Output(linearlist* list) /* 打印说明文档 */
  25. {
  26.   system("cls"); /* 清屏 */
  27.   printf("-             顺序表                -\n"); /* 输入功能菜单 */
  28.   printf("-  a: 追加一个节点 i: 插入一个节点  -\n");
  29.   printf("-  d: 删除一个节点 e: 退出          -\n");
  30.   ListList(list);    /* 打印线性顺序表  */
  31. }
  32. /***************************创建线性顺序表***********************/
  33. linearlist* CreateList()/* 创建线性顺序表 */
  34. {
  35.   linearlist *list = (linearlist*)malloc(sizeof(linearlist)); /* 分配空间 */
  36.   list -> last = 0; /* 初始化头节点值 */
  37.   return list; /* 返回初始化头节点指针 */
  38. }
  39. /***************************追加结点***********************/
  40. void AppendNode(linearlist* list, int n)  /* 追加节点 */
  41. {
  42.   if(list -> last < MAXLISTSIZE )  /*顺序表不溢出 */
  43.   {
  44.     list -> data[list -> last] = n; /* 初始化节点值 */
  45.     list -> last += 1; /* 顺序表长度加1 */
  46.   }
  47. }
  48. /***************************插入结点***********************/
  49. void InsertNode(linearlist* list, int n, int pos) /* 插入节点 */
  50. {
  51.   int j;
  52.   if(pos < 0 || pos > list -> last )
  53.     printf("所插入的位置超出顺序表的范围\n");
  54.   else
  55.   {
  56.     for(j = list -> last; j >= pos; j--)  /*逆向遍历顺序表*/
  57.       list -> data[j+1] = list -> data[j];  /*元素后移*/
  58.     list -> data[pos] = n;  /*指向节点赋值*/
  59.     list -> last++; /* 顺序表长度加1 */
  60.   }
  61. }
  62. /***************************删除结点***********************/
  63. void DeleteNode(linearlist* list, int pos)  /* 删除节点 */
  64. {
  65.   int j;
  66.   if((pos < 0) || (pos > list -> last ))  /* 删除位置超出顺序表的范围 */
  67.     printf("所要删除的位置超出顺序表的范围\n");
  68.   else
  69.   {
  70.     for(j = pos; j < list -> last; j++)  /*遍历顺序表*/
  71.       list -> data[j] = list -> data[j+1];  /*元素前移*/
  72.     list -> last--; /* 顺序表长度减1 */
  73.   }
  74. }
  75. /**************************主函数************************/
  76. int main()  /* 主函数 */
  77. {
  78.   int key, pos; /*key元素值,pos下标 */
  79.   char ch;
  80.   linearlist *list;
  81.   list = CreateList();  /* 创建顺序表*/
  82.   while(1)
  83.   {
  84.     Output(list);
  85.     printf("请选择:");
  86.     ch = getchar();  /*接受选项*/
  87.     fflush(stdin);  /*清除缓存,enter会在缓存区域,所以要清空*/
  88.     if(ch == 'a')  /*追加*/
  89.     {
  90.       printf("请输入要追加的数据:");
  91.       scanf("%d", &key);
  92.       AppendNode(list, key);
  93.     }
  94.     else if(ch == 'i')  /*插入*/
  95.     {
  96.       printf("请输入要插入的数据的位置:");
  97.       scanf("%d", &pos);
  98.       printf("请输入要插入的数据:");
  99.       scanf("%d", &key);
  100.       InsertNode(list, key, pos);
  101.     }
  102.     else if(ch == 'd')  /*删除*/
  103.     {
  104.       printf("请输入要删除的数据的位置:");
  105.       scanf("%d", &pos);
  106.       DeleteNode(list, pos);
  107.     }
  108.     else if(ch == 'e')  /*退出*/
  109.       exit(0);
  110.     Output(list);
  111.     fflush(stdin);  /*清除缓存*/
  112.   }
  113.   return 0;
  114. }
复制代码

凌风清羽  中级技匠
 楼主|

发表于 2016-5-22 16:55:50

以后每天一篇数据结构,哈哈~~
回复

使用道具 举报

吹口琴的钢铁侠  初级技匠

发表于 2016-5-23 17:40:22

这有什么用啊。。。没学过的根本看不懂,跟树莓派也没什么关系啊
回复

使用道具 举报

dsweiliang  初级技神

发表于 2016-6-3 09:34:31

学习学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail