我也是初学者,写的可能好理解一点,学过去一段时间了,感觉生疏了,正好复习一下嘿嘿,就是创建,插入,测量,删除的几个操作。#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(LinkList)
typedef struct Node
{
int data;
struct Node* next;
}LinkList;
LinkList *InitList()
{
LinkList* L;
L = (LinkList *)malloc(LEN);
if (L == NULL)
{
exit(0);
}
L->next == NULL;
return L;
}
LinkList *CreatList() //尾插法创建单链表
{
LinkList* L;
LinkList* p;
LinkList* tail; //定义一个尾指针
int num;
L = InitList(); //头结点
tail = L;
printf("创建一个单链表,请输入数据以0结束: ");
scanf("%d", &num);
while (num != 0)
{
p = (LinkList*)malloc(LEN);
p->data = num;
tail->next = p;
tail = p;
scanf("%d",&num);
}
tail->next = NULL;
return L;
}
void PrintList(LinkList* L)
{
LinkList* p;
p = L->next;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
}
LinkList* DeleteList(LinkList* L, int N)
{
LinkList* p;
LinkList* q;
p = L->next;
while (p != NULL)
{
if (L->next->data == N) //如果第一个结点就是要删除的元素
{
L->next = L->next->next;
break;
}
else if(p->next->data == N)
{
p->next = p->next->next;
break;
}
p = p->next;
}
return L;
}
int ListLength(LinkList* L)
{
int count = 0;
LinkList* p;
p = L->next;
while (p != NULL)
{
count++;
p = p->next;
}
return count;
}
LinkList* InsertList(LinkList* L, int M, int local)
{
int i=0;
LinkList *p;
LinkList* q; //用来接收要插入的数据
q = (LinkList *)malloc(LEN);
p = L->next;
q->data = M;
while (p != NULL)
{
if (local == 1) //如果插在第一个结点
{
q->next = L->next;
L->next = q;
break;
}
else if((i+2) == local)
{
q->next = p->next;
p->next = q;
break;
}
i++;
p = p->next;
}
return L;
}
int main(void)
{
LinkList* L;
int N;
int local, M;
int len;
L = CreatList();
printf("当前链表中的元素是:\n");
PrintList(L);
printf("\n当前链表的长度是:");
len = ListLength(L);
printf("%d", len);
printf("\n请输入你想插入的元素是及它的位置: ");
scanf("%d %d", &M, &local);
InsertList(L, M, local);
printf("插入后链表中的元素是:\n");
PrintList(L);
printf("\n请输入你想要删除的元素:");
scanf("%d", &N);
DeleteList(L,N);
printf("删除后链表中的元素是:\n");
PrintList(L);
return 0;
}
|