单链表实例

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 
  5 //定义节点类型
  6 typedef struct Node
  7 {
  8     int data;
  9     struct Node *next;
 10 }Node, *LinkedList;
 11 
 12 //初始化
 13 LinkedList LinkedListInit()
 14 {
 15     Node *L;
 16     L=(Node *)malloc(sizeof(Node));
 17     if(L==NULL)
 18     {
 19         exit(0);
 20     }
 21     else
 22     {
 23         L->next=NULL;
 24     }
 25     return L;
 26 }
 27 
 28 //单链表的建立 (头插法)
 29 LinkedList LinkedListCreatH()
 30 {
 31     Node *L;
 32     L=(Node *)malloc(sizeof(Node));
 33     L->next=NULL;
 34     
 35     
 36     int x;
 37     while(scanf("%d",&x) !=EOF)
 38     {
 39         Node *p;
 40         p=(Node *)malloc(sizeof(Node));
 41         p->data=x;
 42         L->next=p->next;
 43         L->next=p;
 44     }
 45     return L;
 46 }
 47 
 48 // 单链表的建立 (尾插法)
 49 LinkedList LinkedListCreatT()
 50 {
 51     Node *L;
 52     L=(Node *)malloc(sizeof(Node));
 53     L->next=NULL;
 54     Node *r;
 55     r=L;
 56     
 57     int x;
 58     while(scanf("%d",&x)!=EOF)
 59     {
 60         Node *p;
 61         p=(Node *)malloc(sizeof(Node));
 62         p->data=x;
 63         r->next=p;
 64         r=p;
 65     }
 66     r->next=NULL;
 67     return L;
 68     
 69 }
 70 
 71 //单链表的插入,第i个单位插入x的元素
 72 LinkedList LinkedListInsert(LinkedList L,int i,int x)
 73 {
 74     Node *pre;
 75     pre=L;
 76     int tempi=0;
 77     for(tempi=1;tempi<i;tempi++)
 78     {
 79         pre=pre->next;
 80     }
 81     
 82     Node *p;
 83     p=(Node *)malloc(sizeof(Node));
 84     p->data=x;
 85     p->next=pre->next;
 86     pre->next=p;
 87     
 88     return L;
 89 }
 90 
 91 //单链表的删除
 92 
 93 LinkedList LinkedListDelete(LinkedList L,int x)
 94 {
 95     Node *p,*pre;
 96     p=L->next;
 97     while(p->data !=x)
 98     {
 99         pre=p;
100         p=p->next;
101     }
102     pre->next=p->next;
103     free(p);
104     
105     return L;
106 }
107 
108 //链表内容的修改
109 LinkedList LinkedListReplace(LinkedList L,int x,int k)
110 {
111     Node *p=L->next;
112     //int i=0;
113     while(p)
114     {
115         if(p->data==x)
116         {
117             p->data=k;
118         }
119         p=p->next;
120     }
121     return L;
122 }
123 
124 //便利输出单链表
125 void printList(LinkedList L)
126 {
127     Node *p=L->next;
128     int i=0;
129     while(p)
130     {
131         printf("第%d个元素的值为%d\n",++i,p->data);
132         p=p->next;
133     }
134 }
135 
136 int main()
137 {
138     //创建链表
139     LinkedList list;
140     printf("请输入单链表的数据,以EOF结尾\n");
141     list= LinkedListCreatT();
142     printList(list);
143     
144     // 插入节点
145     int i;
146     int x;
147     printf("请输入插入数据的位置:");
148     scanf("%d",&i);
149     printf("请输入数据的值:");
150     scanf("%d",&x);
151     LinkedListInsert(list,i,x);
152     printList(list);
153     
154     //修改
155     
156     printf("请输入修改的数据:");
157     scanf("%d",&i);
158     printf("请输入修改后的数据:");
159     scanf("%d",&x);
160     LinkedListReplace(list,i,x);
161     printList(list);
162     
163     
164     //删除
165     printf("请输入要删除的元素的值:");
166     scanf("%d",&x);
167     LinkedListDelete(list,x);
168     printList(list);
169     
170     
171     return 0;
172     
173     
174     
175     
176 }

 

posted on 2022-01-23 18:33  ilamjan  阅读(70)  评论(0编辑  收藏  举报