#include "stdio.h"
#include "malloc.h"
#define Maxsize 50
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}LinkList;
LinkList *InitList()
{
LinkList *S;
S=(LinkList *)malloc(sizeof(LinkList));
printf("初使化链表!/n");
if(!S)
{
printf("空间不足");
return NULL;
}else
{
S->next=NULL;
return S;
}
}
LinkList *createList(LinkList *head)
{
int n,i;
char tmp;
LinkList *p;
printf("请输入结点的个数:/n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入%d个结点值",i);
fflush(stdin);
scanf("%d",&tmp);
p=(LinkList *)malloc(sizeof(LinkList));
p->data=tmp;
p->next=head->next;//头插法
head->next=p;
}
printf("/n");
return head;
}
//统计总共输入了多少个元素
int nodeNum;
int ListLength(LinkList *head)
{
while(head->next!=NULL)
{
head=head->next;
nodeNum++;
}
return nodeNum;
}
//显示链表
void DisplayList(LinkList *head)
{
int i;
nodeNum=0;//节点统计数变0,便之从开始计数。
if(head->next==NULL){
printf("这是一个空链表");
}else{
for(i=ListLength(head);head->next!=NULL;i--)
{
//从头部取数据!
head=head->next;//因为头结点是空值,所以要先把头结点去除后再输出!
printf("第%d个元素是:",i);
fflush(stdin);
printf("%d",head->data);
printf("/n");
}
}
}
LinkList *ListInsert(LinkList *head,datatype data,int i)
{
LinkList *p;
nodeNum=0;//节点统计数变0,便之从开始计数。
if(ListLength(head)==Maxsize-1)
{
printf("链表已达最大!不可再插入!");
return 0;
}
else
{
p=(LinkList *)malloc(sizeof(LinkList));
p->data=data;
p->next=head->next;
head->next=p;
}
return head;
}
LinkList *ListDel(LinkList *head,int p)
{
int i;
LinkList *first,*second;
first=head->next;
second=head;
nodeNum=0;
if(p<0||p>ListLength(head))
{
printf("所要删除的位置不对,请重新选择位置!");
}
else
{
for(i=0;i<p;i++)
{
first=first->next; //first指向当前节点
second=second->next; //second指向当前节点的前驱
}
second->next=first->next;
free(first);
}
return head;
}
int main(){
int num,point;
LinkList *p;
p=InitList();
createList(p);
printf("输出这个顺序表的值:/n");
DisplayList(p);
printf("/n");
printf("请输入要插的数据!");
scanf("%d",&num);
printf("请输入要插的位置!");
scanf("%d",&point);
ListInsert(p,num,point);
printf("输出插入一个数据后,这个顺序表的值:/n");
DisplayList(p);
printf("/n");
printf("请选择你所要删除数据的位置!");
scanf("%d",&point);
ListDel(p,point);
printf("输出删除一个数据后,这个顺序表的值:/n");
DisplayList(p);
printf("/n");
}