首页 > 其他 > 详细

线性表

时间:2014-03-03 17:08:47      阅读:521      评论:0      收藏:0      [点我收藏+]

1.基本概念

线性表:n个数据类型相同元素的有限序列。(比如矩阵,数组,字符串,堆栈,队列等)。

特点:第一个元素无直接前趋,最后一个元素无直接后继,其余元素都有一个直接前趋和一个直接后继。

存储结构:线性存储结构,链式存储结构。

2.练习

(1)两个递增顺序表(顺序存储),la,lb,顺序插入顺序表lc中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <stdio.h>
#include <stdlib.h>
 
#define    SIZE   6
#define    END    9999
#define    CHARGE 0
typedef int ElemType;
 
typedef struct list {
    ElemType elem[15];
    int last;
} SeqList;
 
void initList(SeqList *l)
{
    int index = 0;
    int midleVarile = 0;
 
    printf("if you want to exit please input 9999\n");
    printf("please input intger:");
 
    while(1)
    {
        scanf("%d", &midleVarile);
 
        if(midleVarile == END)
        {
            break;
        }
        else
        {
            l->elem[index] = midleVarile;
        }
 
        index++;
//      fflush(stdin);
    }
 
   l->last = index;
}
 
void mergeList(SeqList *l1, SeqList *l2, SeqList *l3)
{
    int index1 = 0;
    int index2 = 0;
    int index3 = 0;
    int midleInt = 0;
 
    while((index1 != (l1->last)) && (index2 != (l2->last)))
    {
            if(l1->elem[index1] <= l2->elem[index2])
            {
                    midleInt = l1->elem[index1];
                    l3->elem[index3] = midleInt;
                        
                    index1++;
                    index3++;
            }
            else
            {
                midleInt = l2->elem[index2];
                l3->elem[index3] = midleInt;
 
                index2++;
                index3++;
            }
    }
 
    if(index1 == (l1->last))
    {
        for( ; index2 != (l2->last); index2++, index3++)
        {
               l3->elem[index3]  = l2->elem[index2];
        }
    }
    else
    {
        for(; index1 != (l1->last); index1++, index3++)
        {
            l3->elem[index3] = l1->elem[index1];
        }
    }
 
    l3->last = l1->last + l2->last;
}
 
void outList(SeqList *l)
{
    int index = 0;
    int i;
 
    for(i = 0; i < l->last; i++)
    {
        printf("%d  ", l->elem[i]);
    }
}
 
int main()
{
    SeqList l1;
    SeqList l2;
    SeqList l3;
 
    initList(&l1);
    initList(&l2);
 
    mergeList(&l1, &l2, &l3);
 
    outList(&l3);
}

(2)代码功能如下,后期会继续增加,当作复习用。

bubuko.com,布布扣
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 #define OK       1
  5 #define ERROR    0
  6 #define OVERFLOW -2
  7 
  8 typedef int ElemType;
  9 
 10 typedef struct Node 
 11 {
 12     ElemType data;
 13     struct Node *next;
 14 } Node, *LinkList;
 15 
 16 // 创建新链表
 17 Node * NewLinkList()
 18 {
 19     Node *node = (Node *)malloc(sizeof(Node));
 20     node->next = NULL;
 21     return node;
 22 }
 23 
 24 //初始化链表
 25 void InitLinkList(LinkList l)
 26 {
 27 //    Node * l1;
 28     int midleInt = 0;
 29 
 30     printf("please input intger end with 9999:");
 31 
 32     while(midleInt != 9999)
 33     {
 34         scanf("%d", &midleInt);
 35         l->next = (Node *)malloc(sizeof(Node));
 36         l = l->next;
 37         l->next = NULL;
 38         l->data = midleInt;
 39     }
 40 }
 41 
 42 //得到链表的长度
 43 unsigned int getListLength(LinkList l)
 44 {
 45     int lLength = 0;
 46 
 47     l = l->next;
 48 
 49     if(l == NULL)
 50        return 0;
 51     
 52     while(l != NULL)
 53     {
 54         lLength++;
 55         l = l->next;
 56     }
 57 
 58     return lLength;
 59 }
 60 
 61 //链表的反转
 62 LinkList ReverseList(LinkList l)
 63 {
 64     LinkList l1 = NewLinkList();
 65     LinkList l2;
 66     LinkList l3 = l;
 67 
 68     
 69     if((l->next == NULL) || (l->next->next == NULL))
 70         return l;
 71 
 72     l = l->next;
 73 
 74     while(l != NULL)
 75     {
 76         l2 = l1->next;
 77         l3 = l->next;
 78         l1->next = l;
 79         l->next  = l2;
 80         l = l3;
 81     }
 82 
 83     return l1;
 84 }
 85 
 86 //链表清空
 87 void LinkListClear(LinkList l)
 88 {
 89      l->next = NULL;
 90 }
 91 
 92 //链表是否为空
 93 int LinkListisEmpty(LinkList l)
 94 {
 95     if(l->next == NULL) 
 96         return 1;
 97     else
 98         return 0;
 99 }
100 
101 //链表遍历
102 void LinkListTraverse(LinkList l)
103 {
104 //    LinkList  l1 = l;
105     l = l->next;
106 
107     while(l != NULL)
108     {
109         printf("%d ", l->data);
110 
111         l = l->next;
112     }
113     printf("\n");
114 }
115 
116 int main(void)
117 {
118     LinkList l = NewLinkList();
119     InitLinkList(l);
120     LinkListTraverse(l);
121     l = ReverseList(l);
122     LinkListTraverse(l);
123 }
bubuko.com,布布扣

后面会继续增加

线性表,布布扣,bubuko.com

线性表

原文:http://www.cnblogs.com/xiongge/p/3577417.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!