#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
// 单链表结点结构
typedef struct node
{
int data;
struct node *next;
} NODE, *NODEP;
NODEP InitList(void);
void InsertList(NODEP pHead, int x, int i);
void DeleteList(NODEP pHead, int i);
void PrintList(NODEP pHead);
void ClearList(NODEP pHead);
void main(void)
{
int iNo, iX;
char chItem;
NODEP pHead;
pHead = InitList();
while (1)
{
system("cls");
printf("
1--插入结点
\n");
printf("
2--删除结点
\n");
printf("
3--显示结点
\n");
printf("
0--退出
\n");
printf("
\n");
printf("
请输入选项(0-3):
");
chItem = getche();
switch (chItem)
{
case '1':
printf("\n请输入插入位置:");
scanf("%d", &iNo);
printf("\n请输入要插入的数据元素:");
scanf("%d", &iX);
InsertList(pHead, iX, iNo);
break;
case '2':
printf("\n请输入删除元素的序号:");
scanf("%d", &iNo);
DeleteList(pHead, iNo);
break;
case '3':
PrintList(pHead);
break;
case '0':
printf("\n退出程序!\n");
ClearList(pHead);
exit(0);
default:
printf("\n选项不正确!");
}
printf("\n按任意键继续...");
getch();
}
}
// 初始化单链表为空表
NODEP InitList(void)
{
NODEP pHead;
pHead = (NODEP)malloc(sizeof(NODE));
if (pHead == NULL)
{
printf("内存分配失败!\n");
exit(0);
}
pHead->next = NULL;
return pHead;
}
// 将结点 x 插入到单链表 pHead 的第 i 个位置
void InsertList(NODEP pHead, int x, int i)
{
NODEP P,S;
int j=0;
P=pHead;
while((P!=NULL) && (j<I-1))
{
P=P->next;
j++;
}
if(P==NULL)
printf("第 i-1 个结点不存在",i);
else
{
S=(NODEP)malloc(sizeof(NODE));
S->data=x;
S->next=P->next;
P->next=S;
}
}
// 删除单链表 pHead 的第 i 个结点
void DeleteList(NODEP pHead, int i)
{
NODEP P,Q;
int j=0;
P=pHead;
while((P!=NULL) && (j<I-1))
{
P=P->next;
j++;
}
if(P==NULL)
printf("第 i-1 个结点不存在",i);
else
{
Q=P->next;
P->next=Q->next;
free(Q);
}
}
// 显示单链表
void PrintList(NODEP pHead)
{
NODEP pCur;
printf("\nOutput: ");
pCur = pHead->next;
while (pCur != NULL)
{
printf("%d ", pCur->data);
pCur = pCur->next;
}
printf("\n");
}
// 销毁单链表
void ClearList(NODEP pHead)
{
NODEP pCur, pTemp;
pCur = pHead;
while (pCur != NULL)
{
pTemp = pCur;
pCur = pCur->next;
free(pTemp);
}
}