单链表插入新元素
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构作业:
计科1301 张睿算法目的:实现在一个线性单链表中插入一个新的元素
设计思路:构建一个线性单链表,获得头指针。输入想要插入新元素的位置,和想要插入的元素。通过头指针找到相应位置,插入元素,输出插入了新元素的链表。
设计方案:
1、单链表的类型定义:
typedef int ElemType;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
2、构建单链表:
void creatlist(LinkList &L)
{
int x,k;
LinkList p;
printf("输入想要插入的链表的长度:\n");
scanf("%d",&x);
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
printf("输入%d个元素:",x);
for(k=x;k>0;--k)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
}
3、插入新元素:
Status ListINsert_L(LinkList &L,int i,ElemType &e)
{LinkList p,s;
p=L;
int j=0;
while(p&&j {p=p->next;++j;} if(!p||j>i-1) 若没有第i个元素则输出错误 return ERROR; s=(LinkList)malloc(sizeof(LNode)); s->data=e;s->next=p->next; p->next=s; 将新元素e值放在原来第i元素处,其余元素 return OK; 向后移一位 } 4、将链表输出: void PrintList_L(LinkList L) { L=L->next; printf("链表中的元素为:"); while(L) 运用循环结构和头指针向后逐位输出链表 { printf("%d ",L->data); L=L->next; } return; } 5、主函数体: int main() { int n; int t; ElemType e; LinkList L; creatlist(L); PrintList_L(L); printf("\n你想在第几个元素之前插入一个元素:\n"); scanf("%d",&n); printf("输入想要插入的元素的值:\n"); scanf("%d",&t); ListINsert_L(L,n,t); PrintList_L(L); return OK; } 6、运行结果