# 单链表的相关操作

  1 #include <stdio.h>
2 #include <stdlib.h>
3 typedef int ElemType;
4 typedef struct LNode{
5     ElemType data;
6     struct LNode *next;
8 //头插法新建链表
10 {
11     LNode *s;int x;
12     //带头节点的链表
14     L->next=NULL;
15     scanf("%d",&x);
16     while(x!=9999){
17         s=(LNode*)malloc(sizeof(LNode));
18         s->data=x;
19         s->next=L->next;
20         L->next=s;
21         scanf("%d",&x);
22     }
23     return L;
24 }
25 //尾插法新建链表
27 {
28     int x;
30     LNode *s,*r=L;
31     scanf("%d",&x);
32     while(x!=9999){
33         s=(LNode*)malloc(sizeof(LNode));
34         s->data=x;
35         r->next=s;
36         r=s;//r指向新的表尾结点
37         scanf("%d",&x);
38     }
39     r->next=NULL;
40     return L;
41 }
42 //按序号查找结点值
44 {
45     int j=1;
46     LNode *p=L->next;
47     if(i==0) return L;
48     if(i<1)    return NULL;
49     while(p&&j<i){
50         p=p->next;
51         j++;
52     }
53     return p;
54 }
55 //按值查找
57 {
58     LNode *p=L->next;
59     while(p!=NULL&&p->data!=e){
60         p=p->next;
61     }
62     return p;
63 }
64 //新结点插入第i个位置
65 bool ListFrontInsert(LinkList L,int i,ElemType e)
66 {
68     if(NULL==p) return false;
69     //为新插入的结点申请空间
71     s->data=e;
72     s->next=p->next;
73     p->next=s;
74     return true;
75 }
76 //删除第i个结点
78 {
80     if(p==NULL) return false;
82     q=p->next;
83     p->next=q->next;
84     free(q);
85     return true;
86 }
87 //打印链表中每个结点的值
89 {
90     L=L->next;
91     while(L!=NULL){
92         printf("%3d",L->data);
93         L=L->next;
94     }
95     printf("\n");
96 }
97 int main()
98 {
101     //头插法新建链表，输入数据可以为3 4 5 6 7 9999
102     //CreatList1(L);
103     //尾插法新建链表，输入数据可以为3 4 5 6 7 9999
104     CreatList2(L);
105     PrintList(L);
106     search=GetElem(L,2);
107     if(search!=NULL){
108         printf("按序号查找成功\n");
109         printf("%3d\n",search->data);
110     }
111     search=LocateElem(L,6);
112     if(search!=NULL){
113         printf("按值查找成功\n");
114         printf("%3d\n",search->data);
115     }
116     ListFrontInsert(L,2,99);
117     PrintList(L);
118     ListDelete(L,4);
119     printf("删除第四个结点成功\n");
120     PrintList(L);
121     system("pause");
122 }

posted @ 2020-03-21 14:45  午夜的行人  阅读(29)  评论(0编辑  收藏
Live2D