编写算法分别将单链表的创建,插入和删除用C语言实现

如题所述

首先要明确的是LZ 对于链表结构中的结点这个词有一点的了解。并且要知道它其中所表达的意思和所代表的信息。这是前提基础!!
单链表的建立有两种方法,一种是在开头的,,一种是在末尾,一般情况下是在在开头的/。这样的操作有利于在遇到一些边界问题的时候可以和更加容易将算法更好的规范与简化。
下面分别介绍在C中链表创立的两种不同的方法代码如下(仅供参考):
linkList Creat_LinkList1()
{
LinkList H=(LinkList)malloc(sizeof(lNode)) /*产生头结点*/
h->next=NULL;
LNode *s;
int x;
scanf("%d",&x);
while (x!=1)
{
s=(LinkList)malloc(sizeof(LNode));
s-=data=x;
s->next=H->next;
H->next=s;
scanf("%d",&x);
}
return H;
}
下面操作的是在如何在末尾建立链表结构:
LinkList Creat_LinkList2()
{
LinkList H=(LinkList)malloc(sizeof(LNode));
h->next=NULL; /*空表*/
LNode *s;
*r=H;
int x;
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;
}
这两种建立链表所要做的首要工作是申请一个头结点,并且将头结点置空(NULL);
插入:
代码如下:
int Insert_LinkList(LinkList H,int i, ElemType x)
/*在链表H中第i个位置插入一个为X的元素*/

{
LNode *p,*s;
p=Get_LinkList(H,i-1);
if (p==NULL)
{
printf("插入位置 i 出错");

return ERROR;}
else
{s=(LinkList)malloc(sizeof(LNode));
s->data=x;
s->next=p->next;
p->next=s;
return OK;
}
删除:
代码如下:
int Del_LinkList (LinkList H , int i)
{
LinkList p,q;
q+Get_LinkList(H, i-1);
if(q==NULL)
{
printf("第i-1个结点不");
return ERROR;
}
else
{
if (q->next==NULL)
{
printf("第I个结点不存在");
return ERROR;}
else
{
p=q->next;
q->next=p->next;
free(p);/*释放结点p*/
return OK;
}
}
还是那句话LZ必须对于结点的含义要有透彻的认识:

参考资料:数据结构

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-01-09
#include<stdio.h>
#include<malloc.h>

typedef struct stackNode{
int data;
struct stackNode * next;
}LinkNode,* LinkList;
void InitList(LinkList * L)
{
*L = (LinkList)malloc(sizeof(LinkNode)); //只能通过改变指向地址的值的方式来对实参进行修改
(*L)->next = NULL;
}
void CreateList(LinkList L)
{
LinkNode * Node;
LinkNode *p = L;
int value;

printf("Please input a num:");
scanf("%d",&value);
while(value != -1)
{
Node = (LinkNode *)malloc(sizeof(LinkNode));
Node->data = value;
Node->next = NULL;
p->next = Node ;
p = p->next;
printf("Please input a num:");
scanf("%d",&value);
}
}
void InsertList(LinkList L, int value)
{
LinkNode * Node;
LinkNode * p = L;

Node = (LinkNode*)malloc(sizeof(LinkNode));
Node->data = value;
Node->next = NULL;

while(p->next != NULL )
{
p = p->next;
}
p->next = Node;
}
void DelList(LinkList L, int value)
{
LinkNode * p = L;
LinkNode * pre;
while(p != NULL && p->data != value)
{
pre = p;
p = p->next;
}
if(p == NULL)
printf("Did not find %d!\n",value);
else
{
pre->next = p->next;
free(p);
}
}
void Print(LinkList L)
{
LinkNode *p = L->next;
while(p != NULL)
{
printf("%d\n",p->data);
p = p->next;
}
}
void main()
{

LinkList L;
InitList(&L);
CreateList(L);
InsertList(L,10);
DelList(L,12);
Print(L);
}本回答被提问者采纳