数据结构单链表回顾
个人学习回顾 不喜勿喷~!
结构体声明
typedef struct LNode
{
int data;
LNode* next;
} LNode, * LinkList;
单链表操作
- 尾插法创建单链表
- 头插法创建单链表
- 按位插入元素
- 按位删除元素
- 获取某一位置元素
- 返回单链表长度
- 单链表显示
全部代码展示
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int data;
LNode* next;
} LNode, * LinkList;
LinkList list_tailInsert(LinkList &L);
LinkList list_headerInsert(LinkList &L);
bool list_location_insert(LinkList& L, int i, int e);
bool list_location_delete(LinkList& L, int i);
LNode* list_getItem(LinkList L, int i);
int list_checkLength(LinkList L);
void list_Display(LinkList L);
int main()
{
LinkList L;
list_tailInsert(L);
list_Display(L);
int flag = 1;
while(flag)
{
int i; int e;
printf("请输入插入位置以及数值(空格隔开)\n");
scanf_s("%d %d", &i, &e);
list_location_insert(L, i, e) ? printf("插入成功!\n") : printf("插入失败!\n");
list_Display(L);
printf("是否继续插入?1为继续 0为不继续\n");
scanf_s("%d", &flag);
while(flag!=1&&flag!=0)
{
printf("你输入的不合法,请重新输入");
scanf_s("%d", &flag);
}
}
printf("单链表的长度%d\n",list_checkLength(L));
system("pause");
return 0;
}
void list_Display(LinkList L)
{
LNode *p;
p = L;
if(p->next==NULL||p==NULL)
{
printf("您的单链表为空\n");
}
int j = 0;
while(p->next!=NULL)
{
p = p->next;
j++;
printf("第%d个数值为%d\n",j,p->data);
}
}
LinkList list_tailInsert(LinkList &L)
{
L = (LinkList)malloc(sizeof(LNode));
LNode *s, *p;
p = L;
int x;
printf("请输入插入数值");
scanf_s("%d", &x);
while (x != 99999)
{
s = (LNode*)malloc(sizeof(LNode));
s->data = x;
p->next = s;
p = s;
printf("请输入插入数值");
scanf_s("%d", &x);
}
p->next = NULL;
return L;
}
LinkList list_headerInsert(LinkList &L)
{
L = (LinkList)malloc(sizeof(LNode));
LNode* p, * s;
p = L;
p->next = NULL;
int x;
printf("请输入插入数值");
scanf_s("%d", &x);
while(x!=99999)
{
s = (LNode *)malloc(sizeof(LNode));
s->data = x;
s->next = p->next;
p->next = s;
printf("请输入插入数值");
scanf_s("%d", &x);
}
return L;
}
bool list_location_insert(LinkList &L,int i,int e)
{
if(i<1){
printf("插入位置不合法\n");
return false;
}
int j = 0;
LNode *p,*s;
p = L;
while (p!= NULL && j < i - 1)
{
p = p->next;
j++;
}
if(p==NULL) return false;
s = (LNode*)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
LNode* list_getItem(LinkList L,int i)
{
LNode* p;
p = L;
if(i<1)
{
printf("输入位置不合法!\n");
return NULL;
}
int j = 0;
while (j < i&&p!=NULL)
{
p = p->next;
j++;
}
if(p==NULL)
{
return NULL;
}
printf("第%d位置上的数值为%d",i,p->data);
return p;
}
int list_checkLength(LinkList L)
{
LNode* p = L;
if(p->next==NULL)
{
return 0;
}
int num = 0;
while(p->next!=NULL)
{
p = p->next;
num++;
}
return num;
}
bool list_location_delete(LinkList &L,int i)
{
if(i<1||i>list_checkLength(L))
{
printf("您输入的位置不合法\n");
return false;
}
LNode* p = L;
int j = 0;
while(p!=NULL&&j<i-1)
{
p = p->next;
j++;
}
if(p == NULL)
{
return false;
}
p->next = p->next->next;
return true;
}
|