马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int date;
struct node *next;
}node;
node *creat_list(int n);
int empty_list(node *head);
int treval_list(node *head);
int delete_list(node *head,int i,int n);
int add_list(node *head,int i,int k,int n);
int main()
{
node *phead = NULL;
int n,j;
printf("1:创建链表\n");
printf("2:遍历链表\n");
printf("3:删除节点\n");
printf("4:插入节点\n");
printf("5:退出程序\n");
printf("请输入您想操作的编号:");
while(1)
{
scanf("%d",&j);
switch(j)
{
case 1:{
printf("请输入您想创建的有效节点的个数:");
scanf("%d",&n);
phead = creat_list(n);
break;
}
case 2:{
if(empty_list(phead))
{
printf("链表为空,遍历失败,请选择您的下一步操作序号:\n");
break;
}
else
{
treval_list(phead);
break;
}
}
case 3:{
int i;
if(empty_list(phead))
{
printf("链表为空,删除节点失败,请选择您的下一步操作序号:\n");
break;
}
else
{
printf("您想删除第几个节点:");
scanf("%d",&i);
if(!delete_list(phead,i,n))
{
printf("删除节点失败,请选择您的下一步操作序号:\n");
}
break;
}
}
case 4:{
if(empty_list(phead))
{
printf("链表为空,插入节点失败,请选择您的下一步操作序号:\n");
break;
}
else
{
int i,k;
printf("请输入您想插入元素的位置:");
scanf("%d",&i);
printf("请输入您想插入的元素的值:");
scanf("%d",&k);
if(!add_list(phead,i,k,n))
{
printf("插入节点失败,请选择您的下一步操作序号:\n");
}
break;
}
}
case 5:{
exit(-1);
}
}
printf("请输入您的下一步操作:");
}
return 0;
}
node *creat_list(int n)
{
int i,k;
node *head = (node *)malloc(sizeof(node));
node *phead = head;
head->next = NULL;
for(i=1;i<=n;i++)
{
head->next = (node *)malloc(sizeof(node));
if(!head)
{
printf("创建链表失败,请关闭程序,重新打开");
getchar();
exit(-1);
}
scanf("%d",&k);
head->next->date = k;
head->next->next = NULL;
head = head->next;
}
return(phead);
}
int empty_list(node *head)
{
if(head == NULL)
{
return 1;
}
else
{
return 0;
}
}
int treval_list(node *head)
{
int i;
for(i=1;head->next!=NULL;i++)
{
printf("%d\t",head->next->date);
printf("\n");
head = head->next;
}
return 1;
}
int delete_list(node *head,int i,int n)
{
if(i<0||i>n)
{
printf("输入节点位置有误\n");
return 0;
}
else
{
node *p = NULL;
int j;
for(j=1;j<i;j++)
{
head = head->next;
}
printf("您删除的节点为:%d",head->next->date);
p = head->next;
head->next = head->next->next;
free(p);
p = NULL;
printf("\n");
return 1;
}
}
int add_list(node *head,int i,int k,int n)
{
if(i<0||i>n)
{
printf("输入节点位置有误\n");
return 0;
}
else
{
node *p = NULL;
int j;
for(j=1;j<i;j++)
{
head = head->next;
}
p = head;
head = head->next;
p->next = (node *)malloc(sizeof(node));
p->next->next = head;
p->next->date = k;
return 1;
}
}
|