#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct Node {
ElemType data;
struct Node *next;
}Node,*LinkedList;//Node可删除
LinkedList LinkedListInit() { //建立
Node *L;
L = (Node *)malloc(sizeof(Node));
if(L == NULL) {
printf("申请内存空间失败\n");
}
L->next = NULL;
return L;
}
LinkedList LinkedListCreatH() { //输入
Node *L;
L = (Node *)malloc(sizeof(Node));
L->next = NULL;
ElemType x;
while(scanf("%d",&x) != EOF) {
Node *p;
p = (Node *)malloc(sizeof(Node));
p->data = x;
p->next = L->next;
L->next = p;
}
return L;
}
LinkedList LinkedListLocate(LinkedList L,ElemType x) { //查找
Node *p;
int i=1;
p=L->next;
while(p && p->data!=x)
{
p=p->next;
i++;
}
printf("所在位置为:");
printf("%d\n",i);
return p;
}
/*
LinkedList LinkedListInsert(LinkedList L,int i,ElemType x) { //插入后插法
Node *pre;
pre = L;
int tempi = 0;
for (tempi = 1; tempi < i; tempi++) {
pre = pre->next;
}
Node *p;
p = (Node *)malloc(sizeof(Node));
p->data = x;
p->next = pre->next;
pre->next = p;
return L;
}
*/
LinkedList LinkedListInsert(LinkedList L,int i,ElemType x) { //插入前插法
Node *pre;
pre = L;
int tempi = 0;
for (tempi = 1; tempi <= i; tempi++) {
pre = pre->next;
}
Node *p;
p = (Node *)malloc(sizeof(Node));
p->data = x;
p->next = pre->next;
pre->next = p;
ElemType t;
t = pre->data;
pre->data=p->data;
p->data = t;
return L;
}
LinkedList LinkedListDelete(LinkedList L,ElemType x) //删除
{
Node *p,*pre=L;
p = L->next;
while(p->data != x) {
pre = p;
p = p->next;
}
pre->next = p->next;
free(p);
return L;
}
int main() {
LinkedList list,start;
int i;
ElemType x;
printf("1. 建立\n");
printf( "2. 输入\n");
printf( "3. 查找\n");
printf("4. 插入\n");
printf( "5. 删除\n");
printf( "0. 退出\n\n");
int choose = -1;
while (choose != 0)
{
printf("请选择:");
scanf("%d",&choose);
switch (choose)
{
case 1: //建立一个单链表
if (LinkedListInit())
printf("成功建立链表!\n\n");
break;
case 2: //输入数据
printf("请输入单链表的数据:");
list = LinkedListCreatH();
for(start = list->next; start != NULL; start = start->next) {
printf("%d ",start->data);
}
printf("成功输入数据!");
printf("\n");
break;
case 3: //单链表的查找
printf("请输入要查找的元素的值:");
scanf("%d",&x);
LinkedListLocate(list,x);
printf("\n");
break;
case 4: //单链表的插入
printf("请输入插入数据的位置:");
scanf("%d",&i);
printf("请输入插入数据的值:");
scanf("%d",&x);
LinkedListInsert(list,i,x);
for(start = list->next; start != NULL; start = start->next) {
printf("%d ",start->data);
}
printf("\n");
break;
case 5: //单链表的删除
printf("请输入要删除的元素的值:");
scanf("%d",&x);
LinkedListDelete(list,x);
printf("删除后的元素为:");
for(start = list->next; start != NULL; start = start->next) {
printf("%d ",start->data);
}
printf("\n");
break;
case 0:
exit(1);
break;
}
}
/*
printf("请输入单链表的数据:");
list = LinkedListCreatH();
for(start = list->next; start != NULL; start = start->next) {
printf("%d ",start->data);
}
printf("\n");
int i;
ElemType x;
printf("请输入插入数据的位置:");
scanf("%d",&i);
printf("请输入插入数据的值:");
scanf("%d",&x);
LinkedListInsert(list,i,x);
for(start = list->next; start != NULL; start = start->next) {
printf("%d ",start->data);
}
printf("\n");
printf("请输入要查找的元素的值:");
scanf("%d",&x);
LinkedListLocate(list,x);
printf("\n");
printf("请输入要删除的元素的值:");
scanf("%d",&x);
LinkedListDelete(list,x);
for(start = list->next; start != NULL; start = start->next) {
printf("%d ",start->data);
}
printf("\n");
*/
return 0;
}