Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7688021
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: 嵌入式

2011-02-28 08:59:18

  1. /* 顺序存储 */
  2. #include <stdlib.h>
  3. #include <stdio.h>

  4. #define MAXSIZE 10

  5. typedef struct node {                    /* 顺序表的类型 */
  6.   int data[MAXSIZE];
  7.   int length;
  8. } SeqList;

  9. void SeqListInit (SeqList *p, int n)         /* 顺序表初始化函数,其中参数n为初始化数据元素的个数 */
  10. {
  11.   int i;
  12.   if (n > MAXSIZE)                 /* 数据元素的个数不能大于MAXSIZE,否则输出错误信息并返回 */
  13.   {
  14.     printf("error!\n");
  15.     return;
  16.   }
  17.   for(i=0; i<n; i++)                     /* 将数据元素初始化为1~n */
  18.   {
  19.     p->data[i] = i + 1;
  20.   }
  21.   p->length = n;                     /* 初始化顺序表的长度 */
  22. }

  23. int main()
  24. {
  25.   SeqList sl;                        /* 定义顺序表 */
  26.   int i;
  27.   int n = 7;
  28.   SeqListInit(&sl, n);                 /* 初始化顺序表 */
  29.   printf("element (1~%d):\n", sl.length);
  30.   for(i=0; i< sl.length; i++)                /* 输出顺序表的各数据元素 */
  31.   {
  32.     printf("%d ", sl.data[i]);
  33.   }
  34.   printf("\n");
  35.   return 0;
  36. }




  37. /*链式存储 单链表*/
  38. #include <stdlib.h>
  39. #include <stdio.h>
  40. #include <malloc.h>
  41. struct node {
  42.   char data;                            /* 数据元素为单个字符 */
  43.   struct node *next;
  44. };
  45. typedef struct node LinkList;                 /* 定义节点类型 */

  46. LinkList *LinkListCreat()                    /* 创建单链表 */
  47. {
  48.   char ch;
  49.   LinkList *p, *p1, *p2;
  50.   p = (LinkList *)malloc(sizeof(LinkList));        /* 创建表头节点 */
  51.   p->data = '\0';
  52.   p->next = NULL;
  53.   p1 = p;
  54.   while ((ch = getchar()) != '\n')                /* 从键盘重复读入字符 */
  55.   {
  56.     p2 = (LinkList *)malloc(sizeof(LinkList));    /* 创建新节点 */
  57.     p2->data = ch;                        /* 数据域设为读入的字符 */
  58.     p2->next = NULL;                    /* 指针域设为空 */
  59.     p1->next = p2;                        /* 添加到链表的末尾 */
  60.     p1 = p2;
  61.   }
  62.   return p;                             /* 返回链表头指针 */
  63. }

  64. int main()
  65. {
  66.   LinkList *p, *q;
  67.   p = LinkListCreat();                    /* 创建单链表 */
  68.   q = p->next;
  69.   printf("element:\n");
  70.   while(q)                                /* 输出链表的各数据元素 */
  71.   {
  72.     printf("%c ", q->data);
  73.     q = q->next;
  74.   }
  75.   printf("\n");
  76.   return 0;
  77. }


  78. /*单链表应用*/
  79. #include <stdlib.h>
  80. #include <stdio.h>
  81. #include <malloc.h>

  82. struct node {
  83.   char data;                            /* 数据元素为单个字符 */
  84.   struct node *next;
  85. };
  86. typedef struct node LinkList;                 /* 定义节点类型 */


  87. LinkList *LinkListCreat()                    /* 创建单链表 */
  88. {
  89.   char ch;
  90.   LinkList *p, *p1, *p2;
  91.   p = (LinkList *)malloc(sizeof(LinkList));        /* 创建表头节点 */
  92.   p->data = '\0';
  93.   p->next = NULL;
  94.   p1 = p;
  95.   while ((ch = getchar()) != '\n')                /* 从键盘重复读入字符 */
  96.   {
  97.     p2 = (LinkList *)malloc(sizeof(LinkList));    /* 创建新节点 */
  98.     p2->data = ch;                        /* 数据域设为读入的字符 */
  99.     p2->next = NULL;                    /* 指针域设为空 */
  100.     p1->next = p2;                        /* 添加到链表的末尾 */
  101.     p1 = p2;
  102.   }
  103.   return p;                             /* 返回链表头指针 */
  104. }

  105. /*按序号查找节点*/
  106. LinkList *ElemLocatebyNum(LinkList *p, int n)
  107. {
  108.     int i =1;
  109.     LinkList *q;
  110.     q = p;
  111.     while (q != NULL)
  112.     {
  113.         if(n==i)
  114.         {
  115.             return p;
  116.         }
  117.         i++;
  118.         q = q->next;    
  119.     }
  120.     return NULL;
  121. }

  122. /*插入节点*/
  123. int LinkListInsert(LinkList *p, int n, char ch)
  124. {
  125.     LinkList *p1, *p2;
  126.     p1 = ElemLocatebyNum(p, n-1);
  127.     if(p1 == NULL)
  128.     {
  129.         printf("error!\n");
  130.         return -1;
  131.     }
  132.     p2 = (LinkList *)malloc(sizeof(LinkList));
  133.     p2->data = ch;
  134.     p2->next = p1->next;
  135.     p1->next = p2;
  136.     return 0;
  137. }

  138. /*删除节点*/
  139. int LinkListDelete(LinkList *p, int n)
  140. {
  141.     LinkList *p1, *p2;
  142.     p1 = ElemLocatebyNum(p, n-1);
  143.     if(p1 == NULL)
  144.     {
  145.         printf("error!\n");
  146.         return -1;
  147.     }
  148.     p2 = p1->next;
  149.     p1->next = p2->next;
  150.     free(p2);
  151.     return 0;
  152. }

  153. int main()
  154. {
  155.   char x, ch;
  156.   int n;
  157.   LinkList *p, *q, *t;
  158.   p = LinkListCreat();                    /* 创建单链表 */
  159.   q = p->next;
  160.   printf("Usage:\n");                        /* 输出帮助信息 */
  161.   printf("p\t print the link list\n");
  162.   printf("l\t locate a node\n");
  163.   printf("i\t insert a node\n");
  164.   printf("d\t delete a node\n");
  165.   printf("q\t quit\n");
  166.   printf("> ");                            /* 输出提示符 */
  167.   while(1)
  168.   {
  169.     x = getchar();                        /* 获取命令字符 */
  170.     if(x == '\n')                         /* 过滤命令字符后的回车符 */
  171.     {
  172.       printf("> ");
  173.       continue;
  174.     }
  175.     switch (x)                            /* 根据命令字符,执行相应操作 */
  176.     {
  177.       case 'p':                         /* 输出链表的各数据元素 */
  178.         while(q)
  179.         {
  180.           printf("%c ", q->data);
  181.           q = q->next;
  182.         }
  183.         printf("\n");
  184.         q = p->next;                     /* 命令执行完成后将指针指回原位置 */
  185.         break;
  186.       case 'l':                             /* 根据序号查找节点 */
  187.         printf("input the number:\n");
  188.         scanf("%d", &n);                 /* 输入节点序号 */
  189.         t = ElemLocatebyNum(q, n);
  190.         printf("%c ", t->data);                 /* 输出对应的数据元素 */
  191.         break;
  192.       case 'i':                             /* 插入节点 */
  193.         printf("input the number:\n");
  194.         scanf("%d", &n);                 /* 输入插入位置 */
  195.         printf("input the character:\n");
  196.         getchar();                        /* 过滤回车符 */
  197.         ch = getchar();                    /* 输入要插入的字符 */
  198.         LinkListInsert (q, n, ch);
  199.         break;
  200.       case 'd':                         /* 删除节点 */
  201.         printf("input the number:\n");
  202.         scanf("%d", &n);                 /* 输入节点序号 */
  203.         LinkListDelete (q, n);
  204.         break;
  205.       case 'q':                         /* 退出程序 */
  206.         return 0;
  207.         break;
  208.       default:                             /* 命令字符无法识别 */
  209.         printf("error option!\n");
  210.     }
  211.   }
  212.   return 0;
  213. }
阅读(2158) | 评论(0) | 转发(2) |
0

上一篇:栈 --C

下一篇:结构体

给主人留下些什么吧!~~