您的位置:首页 > 其它

链表的生成、插入、删除(LinkList)

2008-10-12 15:24 183 查看


[b]数据结构第二次作业:


链表的生成、插入、删除:

1 #include<stdio.h>

2 #include<malloc.h>

3 #include<stdlib.h>

4

5 #define OVERFLOW -2

6 #define OK 1

7 #define ERROR 0

8 #define NULL 0

9

10 typedef int Status;

11 typedef int ElemType;

12

13 typedef struct LNode{

14 ElemType data;

15 struct LNode *next;

16 }LNode,*LinkList;

17

18 void CreateList_L_Head(LinkList *L,int n); //插入到表头

19 void CreateList_L_Tail(LinkList *L,int n); //插入到表尾

20 void PrintList_L(LinkList L); //输出链表数据

21 Status ListInsert_L(LinkList L,int i,ElemType e); //插入元素

22 Status ListDelete_L(LinkList L,int i,ElemType *e); //删除元素

23

24 int main()

25 {

26 LinkList La = NULL,Lb = NULL;

27 int index = 0;

28 int num = 0;

29

30 printf("Please input 5 numbers(Head Mode):\n");

31 CreateList_L_Head(&La,5);

32 PrintList_L(La);

33 free(La); // This is a joke?.will cause an error?!

34

35 printf("Please input 5 numbers(Tail Mode):\n");

36 CreateList_L_Tail(&Lb,5);

37 PrintList_L(Lb);

38

39 printf("Please input the index&number to Insert:");

40 scanf("%d",&index);

41 scanf("%d",&num);

42 ListInsert_L(Lb,index,num);

43 printf("\nInsert OK\n");

44 PrintList_L(Lb);

45

46 printf("Please input the index to delete:");

47 scanf("%d",&index);

48 ListDelete_L(Lb,index,&num);

49 printf("\nDelete OK\n");

50 PrintList_L(Lb);

51

52 return 0;

53 }

54

55 void CreateList_L_Head(LinkList *L,int n)

56 {

57 LinkList p;

58 int i = 0;

59 *L = (LinkList)malloc(sizeof(LNode));

60 (*L)->next = NULL;

61 for(i=n;i>0;i--)

62 {

63 p = (LinkList)malloc(sizeof(LNode));

64 scanf("%d",&p->data);

65 p->next = (*L)->next;

66 (*L)->next = p;

67 }

68 }

69

70 void CreateList_L_Tail(LinkList *L,int n)

71 {

72 LinkList p,q;

73 int i = 0;

74 *L = (LinkList)malloc(sizeof(LNode));

75 q = *L;

76 (*L)->next = NULL;

77 for(i=n;i>0;i--)

78 {

79 p = (LinkList)malloc(sizeof(LNode));

80 scanf_s("%d",&p->data);

81 q->next = p;

82 q = p;

83 p->next = NULL;

84 }

85

86 }

87

88

89 void PrintList_L(LinkList L)

90 {

91 LinkList p = L->next;

92 printf("LinkList: ");

93 while(p)

94 {

95 printf("%d",p->data);

96 if(p=p->next)

97 printf("-->");

98 }

99 printf("\n");

100 }

101

102 Status ListDelete_L(LinkList L,int i,ElemType *e)

103 {

104 LinkList p = L;

105 LinkList q;

106 int j = 0;

107

108 while(p->next && j<i-1)

109 {

110 p = p->next;

111 ++j;

112 }

113 if(!(p->next) || j>i-1)

114 return ERROR;

115 q = p->next;

116 p->next = q->next;

117 *e = q->data;

118 free(q);

119

120 return OK;

121 }

122

123 Status ListInsert_L(LinkList L,int i,ElemType e)

124 {

125 LinkList p = L,s;

126 int j = 0;

127 while(p && j<i-1)

128 {

129 p = p->next;

130 ++j;

131 }

132 if(!p || j>i-1)

133 return ERROR;

134 s = (LinkList)malloc(sizeof(LNode));

135 s->data = e;

136 s->next = p->next;

137 p->next = s;

138

139 return OK;

140 }

141

142

143

144

145



这个程序是相当的简单!只要领悟了班主任LY的“抄书”两个字的精髓…10分钟搞定不成问题..

说下唯一的难点:二级指针;

我很想知道有谁在写这段代码时完全没意识到这个二级指针的障碍…如果你顺利得出正确结果,而且没有考虑关于L的指针的指针问题,那么,恭喜你:起码你已经领悟了C/C++混合编程的特点、知道引用和指针的语法糖关系、晓得传址实际上也是传值…

我也不知道如何说明二级指针的问题,反正代码写多了就明白了..林锐的书里面会经常涉及这种小技巧一类的,可以参考<highQulityC/C++>

下面贴段代码:

1 #include<iostream>

2 using namespace std;

3

4 int temp = 517;

5

6 void Fun(int num,int* pnum,int** ppnum)

7 {

8 num = 2; // num = 1

9 *pnum = 3; // num = 3

10 pnum = &temp; // num = 3

11 *ppnum = &temp; // *pnum = 517

12 }

13

14

15

16 int main()

17 {

18 int num = 1;

19 int *pnum = #

20 cout<<num<<endl<<&num<<endl<<pnum<<endl<<&pnum<<endl;

21 Fun(num,pnum,&pnum);

22 cout<<endl<<endl;

23 cout<<num<<endl<<&num<<endl<<pnum<<endl<<&pnum<<endl;

24 cout<<*pnum<<endl;

25 }



自己悟出来的才是牛人..啊哈哈…

我突然发现第一次作业写的太SB了,这种封装简直就是糟蹋C++、糟蹋内存啊…

我写代码的水平太一般了..估计软件那边一半以上的人都比我好…

所以我干脆改行去检测代码好了..czy同学很经典的一句话:哎,这个世界上SB程序员就是多啊!(摘自其baidu空间)

最近很崇拜C++的小规模编程和大规模编程的风格研究:代表人物及其作品:林锐的<HighQulityC/C++>(小规模编程)、Tom Cargill的<C++ Programming Style>(大规模编程)

特别提示:<C++ Programming Style>一书已经由某姓聂牛人翻译(聂雪军)

为啥子专门提出他姓聂呢..自己想去吧….

最近很忙..随便写了下子作业而已…其实也是抄书上代码,所以贴出来了…没什么特殊目的…

过几天准备写下我读<C++ 一致性>的感悟写哈,读优秀的代码简直就是跟圣人对话….

------by NewSketcehr

Time: 08.10.10 15:12

[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: