//单链表的实现操作
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//数据类型定义
typedef struct LNode{
int data; //表示数据域
struct LNode *next;//指向下一个节点的指针
}LNode,*LinkList;
//函数声明
LinkList InitList(); //单链表初始化
void DestroyList(LinkList pHead); //销毁线性表
void ClearList(LinkList pHead); //把单链表置为空表
bool ListEmpty(LinkList pHead); //判断链表是否为空
int ListLength(LinkList pHead); //判断链表是否为空
int GetElem(LinkList pHead,int i); //返回第i个元素的值
void ListInsert(LinkList pHead,int i,int e); //向第i个位置插入元素e;
int ListDelete(LinkList pHead,int i); //删除第i个位置上的元素
void ListTraverse(LinkList pHead); //遍历链表中的各个元素
//主函数
int main()
{
LinkList pHead;//建立一个头指针
pHead=InitList();//
int m;
m=GetElem(pHead,2);
printf("The nums is %d\n",m);
int n;
n=ListLength(pHead);
printf("The length is %d\n",n);
ListInsert(pHead,2,67);
printf("The second number is %d\n",GetElem(pHead,2));
n=ListLength(pHead);
printf("The length is %d\n",n);
int temp;
temp=ListDelete(pHead,3);
printf("被删除的元素是%d\n",temp);
ListTraverse(pHead);
return 0;
}
//单链表初始化
LinkList InitList()
{
int i;
int length; //存放有效节点个数;
int val; //存放节点的值;
LinkList pHead=(LinkList)malloc(sizeof(LNode));
if(pHead==NULL)
{
printf("分配失败!\n");
exit(-1);
}
else{
LinkList pTail=pHead;
pTail->next=NULL;
printf("请输入有效节点个数:");
scanf("%d",&length);
for(i=0;i<length;i++)
{
printf("请输入第%d个节点的值:",i+1);
scanf("%d",&val);
LinkList pNew=(LinkList)malloc(sizeof(LNode));
pNew->data=val;
pTail->next=pNew;
pNew->next=NULL;
pTail=pNew;
}
return pHead;
}
}
//销毁线性表
void DestroyList(LinkList pHead)
{
if(pHead->next!=NULL)
{
free(pHead->next);
pHead->next=NULL;
}
printf("Destroy List!\n");
}
/*void ClearList(LinkList pHead)
{
}*/
//判断链表是否为空
bool ListEmpty(LinkList pHead)
{
if(pHead->next=NULL)
return true;
else{
return false;
}
}
//求链表的长度
int ListLength(LinkList pHead)
{
int i;
LinkList pTail;
pTail=pHead;
for(i=0;pTail->next!=NULL;i++)
{
pTail=pTail->next;
}
return i;
}
//返回链表中第i个元素的值
int GetElem(LinkList pHead,int i)
{
if(i>ListLength(pHead))
{printf("超出范围!\n");
exit(-1);
}
else{
int j;
LinkList pTail;
pTail=pHead;
for(j=0;j<i;j++)
{
pTail=pTail->next;
}
return (pTail->data);
}
}
//插入元素e在第i个位置
void ListInsert(LinkList pHead,int i,int e)
{
int j;
//int temp;
LinkList pTail;
LinkList pTemp;
LinkList pt;
pt=(LinkList)malloc(sizeof(LNode));
pt->data=e;
pTail=pHead;
for(j=0;j<i-1;j++)
{
pTail=pTail->next;
}
pTemp=pTail->next;
pTail->next=pt;
pt->next=pTemp;
}
//删除第i个位置上的元素 并返回值
int ListDelete(LinkList pHead,int i)
{
LinkList pTail;
pTail=pHead;
int j=0;
for(j;j<i-1;j++)
{
pTail=pTail->next;
}
int temp;
LinkList pM;
pM=pTail->next->next;
temp=pTail->next->data;
pTail->next=pM;
return temp;
}
//遍历元素
void ListTraverse(LinkList pHead)
{
int i;
LinkList pTail;
pTail=pHead;
for(i=0;i<ListLength(pHead);i++)
{
pTail=pTail->next;
printf("第%d个元素的值为%d\n",i+1,pTail->data);
}
return;
}
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//数据类型定义
typedef struct LNode{
int data; //表示数据域
struct LNode *next;//指向下一个节点的指针
}LNode,*LinkList;
//函数声明
LinkList InitList(); //单链表初始化
void DestroyList(LinkList pHead); //销毁线性表
void ClearList(LinkList pHead); //把单链表置为空表
bool ListEmpty(LinkList pHead); //判断链表是否为空
int ListLength(LinkList pHead); //判断链表是否为空
int GetElem(LinkList pHead,int i); //返回第i个元素的值
void ListInsert(LinkList pHead,int i,int e); //向第i个位置插入元素e;
int ListDelete(LinkList pHead,int i); //删除第i个位置上的元素
void ListTraverse(LinkList pHead); //遍历链表中的各个元素
//主函数
int main()
{
LinkList pHead;//建立一个头指针
pHead=InitList();//
int m;
m=GetElem(pHead,2);
printf("The nums is %d\n",m);
int n;
n=ListLength(pHead);
printf("The length is %d\n",n);
ListInsert(pHead,2,67);
printf("The second number is %d\n",GetElem(pHead,2));
n=ListLength(pHead);
printf("The length is %d\n",n);
int temp;
temp=ListDelete(pHead,3);
printf("被删除的元素是%d\n",temp);
ListTraverse(pHead);
return 0;
}
//单链表初始化
LinkList InitList()
{
int i;
int length; //存放有效节点个数;
int val; //存放节点的值;
LinkList pHead=(LinkList)malloc(sizeof(LNode));
if(pHead==NULL)
{
printf("分配失败!\n");
exit(-1);
}
else{
LinkList pTail=pHead;
pTail->next=NULL;
printf("请输入有效节点个数:");
scanf("%d",&length);
for(i=0;i<length;i++)
{
printf("请输入第%d个节点的值:",i+1);
scanf("%d",&val);
LinkList pNew=(LinkList)malloc(sizeof(LNode));
pNew->data=val;
pTail->next=pNew;
pNew->next=NULL;
pTail=pNew;
}
return pHead;
}
}
//销毁线性表
void DestroyList(LinkList pHead)
{
if(pHead->next!=NULL)
{
free(pHead->next);
pHead->next=NULL;
}
printf("Destroy List!\n");
}
/*void ClearList(LinkList pHead)
{
}*/
//判断链表是否为空
bool ListEmpty(LinkList pHead)
{
if(pHead->next=NULL)
return true;
else{
return false;
}
}
//求链表的长度
int ListLength(LinkList pHead)
{
int i;
LinkList pTail;
pTail=pHead;
for(i=0;pTail->next!=NULL;i++)
{
pTail=pTail->next;
}
return i;
}
//返回链表中第i个元素的值
int GetElem(LinkList pHead,int i)
{
if(i>ListLength(pHead))
{printf("超出范围!\n");
exit(-1);
}
else{
int j;
LinkList pTail;
pTail=pHead;
for(j=0;j<i;j++)
{
pTail=pTail->next;
}
return (pTail->data);
}
}
//插入元素e在第i个位置
void ListInsert(LinkList pHead,int i,int e)
{
int j;
//int temp;
LinkList pTail;
LinkList pTemp;
LinkList pt;
pt=(LinkList)malloc(sizeof(LNode));
pt->data=e;
pTail=pHead;
for(j=0;j<i-1;j++)
{
pTail=pTail->next;
}
pTemp=pTail->next;
pTail->next=pt;
pt->next=pTemp;
}
//删除第i个位置上的元素 并返回值
int ListDelete(LinkList pHead,int i)
{
LinkList pTail;
pTail=pHead;
int j=0;
for(j;j<i-1;j++)
{
pTail=pTail->next;
}
int temp;
LinkList pM;
pM=pTail->next->next;
temp=pTail->next->data;
pTail->next=pM;
return temp;
}
//遍历元素
void ListTraverse(LinkList pHead)
{
int i;
LinkList pTail;
pTail=pHead;
for(i=0;i<ListLength(pHead);i++)
{
pTail=pTail->next;
printf("第%d个元素的值为%d\n",i+1,pTail->data);
}
return;
}