单链表的一些操作
程序员文章站
2024-03-21 13:10:22
...
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node,*LinkedList;
LinkedList LinkedListInit()
{
Node *L;
L = (Node *)malloc(sizeof(Node));
if(L == NULL) {
printf("申请内存空间失败\n");
}
L->next = NULL;
return L;
}
LinkedList LinkedListCreat_H() {//前插法
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 LinkedListCreat_E()//后插法
{
Node *L,*r;
L=(Node *)malloc(sizeof(Node));
L->next=NULL;
r=L;
ElemType x;
while(scanf("%d",&x)!=EOF)
{
Node *p;
p=(Node *)malloc(sizeof(Node));
p->data=x;
p->next=NULL;
r->next=p;
r=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;
return L;
}
LinkedList LinkedListDelete(LinkedList L,ElemType x)//删除
{
Node *p,*pre;
p = L;
while(p->data != x) {
pre = p;
p = p->next;
}
pre->next = p->next;
free(p);
return L;
}
LinkedList LinkedListLook(LinkedList L,ElemType x)//查找
{
int q=0;
Node *p,*pre;
p=L;
while(p->data!=x)
{
pre=p;
p=p->next;
q++;
}
printf("该数据在链表中的位置是第%d个!\n",q);
}
int main()
{
LinkedList list,start;
int a;
printf("1.前插法创建单链表\n");
printf("2.后插法创建单链表\n");
printf("请输入:");
scanf("%d",&a);
if(a==1)
{
printf("前插法:请输入单链表的数据:");
list = LinkedListCreat_H();
for(start = list->next; start != NULL; start = start->next)
{
printf("%d ",start->data);
}
printf("\n");
}
else if(a==2)
{
printf("后插法:请输入单链表的数据:");
list = LinkedListCreat_E();
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);
LinkedListDelete(list,x);
for(start = list->next; start != NULL; start = start->next) {
printf("%d ",start->data);
}
printf("\n");
printf("请输入要查找的数据:");
scanf("%d",&x);
LinkedListLook(list,x);
return 0;
}