1) 链表顺序存储---之二代码

参考文档:

1)《《大话数据结构》》

2)http://blog.chinaunix.net/uid-20680669-id-147844.html

3)http://blog.csdn.net/strommaybin/article/details/51919464

 

1. 线性表(list): 零个或多个数据元素的有限序列

线性表(Linear_list)是最常用也是最简单的数据结构。简言之,一个线性表是n个数据元素的有限序列。线性表是有线性结构的表。什么是线性结构呢?线性结构是n个数据元素的有序集合。它有四个基本特征: 
  1.集合中必存在唯一的一个”第一个元素”; 
  2.集合中必存在唯一的一个”最后的元素”; 
  3.除最后元素之外,其它数据元素均有唯一的”后继”; 
  4.除第一元素之外,其它数据元素均有唯一的”前驱”。 
  如(a1,a2,a3,…..,an),a1为第一个元素,an为最后一个元素,此集合极为一个线性结构的集合。 
  相对应于线性结构,非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个后驱。 
  常用的线性结构有:线性表,栈,队列,双队列,数组,链表,串。

2.  功能及实现:

  1. 结构体的定义
  2. 初始化
  3. 尾部插入值为x的节点
  4. 打印各节点的值
  5. 判断节点是否为空
  6. 查找值为x的节点的位置
  7. 取得i节点的值
  8. 在i位置插入x值
  9. 删除i位置的节点
  1 typedef int Status;
  2 
  3 
  4 //1. 结构体的定义:
  5 #define MAXSIZE 100
  6 typedef int ElemType;
  7 
  8 //结构体的定义
  9 typedef struct list
 10 {
 11     ElemType data[MAXSIZE];//数据
 12     int length ;            //线性表的当前长度
 13 } sqlist;
 14 
 15 
 16 //2. 初始化
 17 sqlist * init_sqlist()
 18 {
 19     //tmp=(TSeqList*)malloc(sizeof(TSeqList));//分配空间
 20     sqlist *list=(sqlist*)malloc(sizeof(sqlist));
 21     list->length=0;
 22     return list;
 23 }
 24 
 25 //3.尾部插值
 26 int  insert_rear_sqlist(sqlist *list,ElemType data)
 27 {
 28     int ret=0;
 29     if(list->length==MAXSIZE||list->length==0)
 30     {
 31         ret=-1;
 32         printf("func insert_rear_sqlist erro: %d",ret);
 33         return -1;
 34     }
 35     list->length=list->length++;//长度+1
 36     list->data[list->length]=data;//插入数据
 37     return 0;
 38 }
 39 
 40 // 4. 打印节点的值
 41 int print_sqlist(sqlist *list)
 42 {
 43     int ret=-1;
 44     if(list->length==0)
 45     {
 46         printf("\nThe list is empty: %d \n",ret);
 47         return ret;
 48     }
 49     
 50     else
 51     {
 52         for(int i=0;i<list->length;i++)
 53             printf("%5d\n",list->data[i]);
 54     }
 55     return 0;
 56 }
 57 
 58 //5. 判断是否为空
 59 int is_empty_sqlist(sqlist *list)
 60 {
 61     return list->length==0?0:1;
 62 }
 63 
 64 //6. 查找值为x的节点的 位置(有问题 待改正)
 65 int find_num_sqlist(sqlist* list,ElemType data)
 66 {
 67     int ret=0;
 68     int temp=0;
 69     if(list->length==MAXSIZE||list->length==0)
 70     {
 71         ret=-1;
 72         printf("func insert_rear_sqlist erro: %d",ret);
 73         return -1;
 74     }
 75     for (int i=0;list->length<MAXSIZE;i++)
 76     {
 77         if(list->data[i]==data)
 78             temp=i;
 79     }
 80     
 81     return temp;
 82 }
 83 
 84 //7. 取得i节点的值
 85 int get_elem(sqlist *list,int i)
 86 {
 87     if(list->length<=0||i<0||i>list->length)
 88     {
 89         return -1;
 90     }
 91     return list->data[i];
 92 }
 93 
 94 // 8.  在i位置插入e值
 95 int insert_list(sqlist *list,int i,ElemType e)
 96 {
 97     int k=0,ret=0;
 98     if(list->length==MAXSIZE)
 99     {
100         ret=-1;
101         printf("insert_list erro :%d ",ret);
102     }
103     if(i<0||i>list->length||list->length>MAXSIZE)
104     {
105         ret=-2;
106         printf("insert_list erro :%d ",ret);
107     }
108     
109         for (k=list->length;k>=i;k--)
110         {
111             list->data[k]=list->data[k-1];//元素后移
112         }
113         list->data[i]=e;
114         list->length++;
115     
116     return 0;
117 }
118 
119 //9. 删除i位置的节点
120 int delete_list(sqlist *list,int i,ElemType *e)
121 {
122     int k=0;
123     int ret=0;
124     if(list->length==0)
125     {
126         ret=-1;
127         printf("delete_list erro: %d",ret);
128     }
129     if(i<0||i>list->length)
130     {
131         ret=-1;
132         printf("delete_list erro: %d",ret);
133     }
134 //    if(i<list->length)
135     //{
136         *e=list->data[i];
137         for(k=i;k<=list->length;k++)
138         {
139             list->data[k]=list->data[k+1];//元素前移
140         }
141     //}
142     list->length--;
143     return 0;
144 }

 

 ---------------------------------------

3. 测试代码

 1 int main()
 2 {
 3     int ret=0;
 4     int t1=1;
 5     int t2=2;
 6     int t3=3;
 7     int t4=4;
 8     int t5=5;
 9 
10     //sqlist *list;
11     //void init_sqlist(sqlist *list)
12     sqlist *list=init_sqlist();
13 
14     //cout<<sizeof(*list);
15     //int insert_list(sqlist *list,int i,ElemType e);
16     //1. 头插法
17     ret=insert_list(list,0,t1);
18     ret=insert_list(list,0,t2);
19     ret=insert_list(list,0,t3);
20     ret=insert_list(list,0,t4);
21     ret=insert_list(list,0,t5);
22     
23     //2. 打印 遍历
24     //int print_sqlist(sqlist *list)
25     printf("插入数据: \n");
26     ret=print_sqlist(list);
27     int tmp=0;
28     
29     //3. 删除链表中所有的节点
30     printf("\n删除节点数据: \n");
31     while(list->length>0)
32     {
33         //int delete_list(sqlist *list,int i,ElemType *e)
34         ret=delete_list(list,0,&tmp);
35         printf("%5d\n",tmp);
36     }
37 
38     //5. 判断是否为空
39     //int is_empty_sqlist(sqlist *list)
40     ret=is_empty_sqlist(list);
41     printf("链表是否为空%5d\n",ret);
42 
43     system("pause");
44     return 0;
45 }

4。 运行结果

 

posted @ 2016-08-23 22:32  蜗牛在奔跑  阅读(483)  评论(0编辑  收藏  举报