c语言顺序表的插入?
发布网友
发布时间:2023-01-17 06:34
我来回答
共1个回答
热心网友
时间:2023-11-18 11:04
#include <stdio.h>
#include <malloc.h>
typedef char ElemType;
typedef struct node
{
ElemType data; /*数据域*/
struct node *next; /*指针域*/
} SLink;
int GetLength(SLink *L) /*求线性表的长度*/
{
int i=0;
SLink *p=L->next;
while (p!=NULL)
{
i++;
p=p->next;
}
return i;
}
int InsElem(SLink *L,ElemType x,int i) /*插入结点*/
{
int j=1;
SLink *p=L,*s;
s=(SLink *)malloc(sizeof(SLink)); /*创建data域为x的结点*/
s->data=x;s->next=NULL;
if (i<1 || i>GetLength(L)+1)
return 0; /*i参数不正确,插入失败,返回0*/
while (j<i) /*从头结点开始找,查找第i-1个结点,由p指向它*/
{
p=p->next;j++;
}
s->next=p->next; /*将*s的next域指向*p的下一个结点(即第i个结点)*/
p->next=s; /*将*p的next域指向*s,这样*s变成第i个结点*/
return 1; /*插入运算成功,返回1*/
}
int DelElem(SLink *L,int i) /*删除结点*/
{
int j=1;
SLink *p=L,*q;
if (i<1 || i>GetLength(L))
return 0; /*i参数不正确,插入失败,返回0*/
while (j<i) /*从头结点开始找,查找第i-1个结点,由p指向它*/
{
p=p->next;j++;
}
q=p->next; /*由q指向第i个结点*/
p->next=q->next; /*将*p的next指向*q之后结点,即从链表中删除第i个结点*/
free(q); /*释放第i个结点占用的空间*/
return 1; /*删除运算成功,返回1*/
}
热心网友
时间:2023-11-18 11:04
#include <stdio.h>
#include <malloc.h>
typedef char ElemType;
typedef struct node
{
ElemType data; /*数据域*/
struct node *next; /*指针域*/
} SLink;
int GetLength(SLink *L) /*求线性表的长度*/
{
int i=0;
SLink *p=L->next;
while (p!=NULL)
{
i++;
p=p->next;
}
return i;
}
int InsElem(SLink *L,ElemType x,int i) /*插入结点*/
{
int j=1;
SLink *p=L,*s;
s=(SLink *)malloc(sizeof(SLink)); /*创建data域为x的结点*/
s->data=x;s->next=NULL;
if (i<1 || i>GetLength(L)+1)
return 0; /*i参数不正确,插入失败,返回0*/
while (j<i) /*从头结点开始找,查找第i-1个结点,由p指向它*/
{
p=p->next;j++;
}
s->next=p->next; /*将*s的next域指向*p的下一个结点(即第i个结点)*/
p->next=s; /*将*p的next域指向*s,这样*s变成第i个结点*/
return 1; /*插入运算成功,返回1*/
}
int DelElem(SLink *L,int i) /*删除结点*/
{
int j=1;
SLink *p=L,*q;
if (i<1 || i>GetLength(L))
return 0; /*i参数不正确,插入失败,返回0*/
while (j<i) /*从头结点开始找,查找第i-1个结点,由p指向它*/
{
p=p->next;j++;
}
q=p->next; /*由q指向第i个结点*/
p->next=q->next; /*将*p的next指向*q之后结点,即从链表中删除第i个结点*/
free(q); /*释放第i个结点占用的空间*/
return 1; /*删除运算成功,返回1*/
}