Chinaunix首页 | 论坛 | 博客
  • 博客访问: 642319
  • 博文数量: 63
  • 博客积分: 1265
  • 博客等级: 中尉
  • 技术积分: 789
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-06 21:54
文章分类

全部博文(63)

文章存档

2017年(1)

2016年(3)

2015年(2)

2013年(5)

2012年(20)

2011年(32)

分类: C/C++

2011-07-03 10:35:14

将线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里.用这中方法存储的线性表称为顺序表(Sequential List)  一般可以用数组来描述顺序表.下面以C语言数组方式实现顺序表,及顺序表的基本运算:
  1. # include <stdlib.h>
  2. # include <stdio.h>
  3. # define ListSize 100

  4. typedef int DataType;
  5. typedef struct
  6. {
  7.  DataType data[ListSize];
  8.  int length;
  9. }Seqlist; //定义顺序表的结构类型

  10. /*错误信息输出函数*/
  11. void Error(char *message)
  12. {
  13.  fprintf(stderr,"Error:%s/n",message); //输出错误信息
  14.  exit(1);//终止程序,返回1给操作系统
  15. }

  16. /*定义顺序表*/
  17. Seqlist initList(int listsize)
  18. {
  19.  int i;
  20.  Seqlist sqlist;
  21.  sqlist.length=listsize;
  22.  for(i=0;i<listsize;i++)
  23.  {
  24.   int data;
  25.   scanf("%d",&data);
  26.   sqlist.data[i]=data;
  27.  }
  28.  return sqlist;
  29. }

  30. /*取得顺序表的长度*/
  31. int getLength(Seqlist list)
  32. {
  33.  return list.length;
  34. }

  35. /*取得顺序表中索引为i的数据*/
  36. DataType getNode(Seqlist list,int i)
  37. {
  38.  return list.data[i];
  39. }

  40. /*向顺序表中查入数据*/
  41. void insertNode(Seqlist *list,DataType dt,int i)
  42. {
  43.  int j;
  44.  if(i<0||i>list->length+1)
  45.  {
  46.   Error("position error");
  47.  }
  48.  if(list->length>=ListSize)
  49.  {
  50.   Error("overflow");
  51.  }
  52.  for(j=list->length-1;j>=i-1;j--)
  53.  {
  54.   list->data[j+1]=list->data[j];
  55.  }
  56.  list->data[i-1]=dt;
  57.  list->length++;
  58. }

  59. /*将顺序表中的数据移出*/
  60. void deleteNode(Seqlist *list,int i)
  61. {
  62.  int j;
  63.  if(i<0||i>list->length)
  64.  {
  65.   Error("position error");
  66.  }
  67.  for(j=i;j<=list->length-1;j++)
  68.  {
  69.   list->data[j-1]=list->data[j];
  70.  }
  71.  list->length--;
  72. }

  73.  

  74. /*输出顺序表*/
  75. void printList(Seqlist sqlist)
  76. {
  77.  int i;
  78.  int listsize=sqlist.length;
  79.  printf("List size=%d/n",sqlist.length);
  80.  for(i=0;i<listsize;i++)
  81.  {
  82.   printf("list data[%d]=%d/n",i,sqlist.data[i]);
  83.  }
  84. }


  85. void main()
  86. {
  87.  int listsize=5;
  88.  Seqlist sqlist;
  89.  Seqlist *list;
  90.  DataType dt;
  91.  printf("Please init list/n");
  92.  sqlist=initList(5);
  93.  list=&sqlist;
  94.  printf("the list is:/n");
  95.  printList(sqlist);
  96.  printf("insert node to 2/n");
  97.  insertNode(list,0,2);
  98.  printList(sqlist);
  99.  deleteNode(list,6);
  100.  printList(sqlist);
  101.  dt=getNode(sqlist,3);
  102.  printf("getnode 3 %d/n",dt);
  103. }


阅读(1216) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~