数据结构链表的简单处理
代码:
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
//单链表类型定义
typedef struct node
{
int data;
struct node *next;
}LNode, *LinkList;
//单链表的创建 (尾插法)
LinkList Creat_LinkList( )
{ LNode *s,*r;int x;
LinkList H = (LinkList) malloc(sizeof(LNode));
H->next = NULL;r=H;
scanf("%d",&x);
while(x!=-1)
{ s = (LinkList) malloc(sizeof(LNode));
s->data=x;
s->next = r->next;
r->next = s;
r=s;
scanf("%d",&x);
}return H;
}
//按序号查找
LinkList Get_LinkList(LinkList H,int k)
{ LNode *p;
int j=1;
p=H->next;
while(p->next!=NULL && j<k)
{ p=p->next;
j++;
}
if(j==k)return p;
else return NULL;
}
//单链表的插入
int Insert_LinkList(LinkList H, int i, int x)
{
//插入代码;
LinkList p, q, s;
q = Get_LinkList(H,i-1);
if(q == NULL)
{
printf("第%d个节点不存在", i - 1);
return ERROR;
}
else
{
if(q->next == NULL)
{
printf("第%d个节点不存在", i);
return ERROR;
}
else
{
s= (LinkList) malloc (sizeof(LNode));
s->data = x;
p = q->next;
q->next = s;
s->next = p;
return OK;
}
}
}
//单链表的删除
int Del_LinkList(LinkList H,int i)
{
//删除代码;
LinkList p, q;
q = Get_LinkList(H,i-1);
if(q == NULL)
{
printf("第%d个节点不存在", i - 1);
return ERROR;
}
else
{
if(q->next == NULL)
{
printf("第%d个节点不存在", i);
return ERROR;
}
else
{
p = q->next;
q->next = p->next;
free(p);
return OK;
}
}
}
//单链表的输出
void Print_LinkList(LinkList H)
{
LNode *p;
p=H->next;
while(p!=NULL)
{
printf("%d->",p->data);
p=p->next;
}
printf("end\n");
}
main()
{
LinkList H,p;
int i,num,x;
H=Creat_LinkList( );
Print_LinkList(H);
printf("请输入要插入的序号:\n");
scanf("%d",&num);
printf("请输入要插入的值:\n");
scanf("%d",&x);
if(Insert_LinkList(H,num,x)==OK)
{ printf("插入成功!\n");Print_LinkList(H);}
else
printf("插入失败!\n");
//调用删除代码;
printf("请输入要删除的序号:\n");
scanf("%d", &num);
if(Del_LinkList(H,num)==OK)
{
printf("删除成功!\n");
Print_LinkList(H);
}
else
printf("删除失败!\n");
}