|
发表于 2020-3-10 20:22:10
|
显示全部楼层
我也是初学者,写的可能好理解一点,学过去一段时间了,感觉生疏了,正好复习一下嘿嘿,就是创建,插入,测量,删除的几个操作。
- #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;
- }
复制代码 |
|