程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 1) 鏈表順序存儲---之二代碼,存儲---

1) 鏈表順序存儲---之二代碼,存儲---

編輯:關於C語言

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 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。 運行結果

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved