当前位置:首页 » 编程语言 » 链表插入元素c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

链表插入元素c语言

发布时间: 2022-01-16 03:05:18

c语言单链表怎么插入节点

#include"sll_node.h"
#include<stdlib.h>

#defineFALSE0
#defineTRUE1

//insertNode2:把newValue的值插入到递增排序的链表中,正确返回TRUE,错误返回FALSE
//nextp是指向当前节点的指针,最初是头指针
intinsertNode2(Node**nextp,intnewValue)
{
Node*newNode;//新节点指针
Node*current;//当前节点指针

current=*nextp;//最初当前节点为nextp指针指向的节点
//查找新插入节点的位置
while(current!=NULL&&current->value<newValue)
{
nextp=¤t->next;
current=current->next;
}

//为新节点分配内存
newNode=(Node*)malloc(sizeof(Node));
if(newNode==NULL)
returnFALSE;
newNode->value=newValue;

//统一了插入的步骤。即:每次插入,都是前一个指针指向新节点,新节点指向下一个节点
*nextp=newNode;
newNode->next=current;

returnTRUE;
}

main函数
[cpp]viewplain
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"sll_node.h"

intinsertNode(Node**rootp,intnewValue);
intinsertNode2(Node**nextp,intnewValue);

intmain()
{
srand(time(0));

Node*head=(Node*)malloc(sizeof(Node));
head->next=NULL;

for(inti=0;i<5;i++)
{
inttemp=rand()%50;
printf("%d ",temp);
//insertNode(&head,temp);
insertNode2(&head,temp);
}

Node*p=head->next;
while(p!=NULL)
{
printf("%d ",p->value);
p=p->next;
}

getchar();
getchar();
return0;
}

⑵ c语言链表插入元素,再插入函数中总是会报错

怎么我试了插入没看到出错

⑶ c语言链表插入元素的问题

h代表链表头指针;
&a[0]是数组首地址
5代表数组a的数组元素的个数

⑷ C语言链表插入

char data[4]?
结点data是字符串?

抽时间帮你写了一个
有什么不合要求的地方你自己改改吧

#include <stdio.h>
#include <string.h>
#include <malloc.h>

typedef struct Lnode{
char *data;
struct Lnode *next;
}Lnode, *LinkList;

void CreateList(LinkList &L, char *buff)
{
int flag=0, j=0;
int len=strlen(buff);

L=(Lnode *)malloc(sizeof(Lnode));
L->next=NULL;
LinkList q=L;
for(int i=0;i<len;i+=4)
{
j=0;
LinkList p=(Lnode *)malloc(sizeof(Lnode));
q->next=p;
p->next=NULL;
p->data=(char *)malloc(sizeof(char)*5);
while(j<4)
{
p->data[j++]=buff[flag++];
}
p->data[4]='\0';
q=q->next;
}
}//初始化链表L

void TraverseList(LinkList L)
{
LinkList p;
p=L->next;
while(p)
{
printf("%s",p->data);
p=p->next;
}
printf("\n");
}//遍历链表L

void InsertList(LinkList &L,int i,char *ins)
{
LinkList p=L;
int temp=0;

i/=4;
while(temp<i)
{
p=p->next;
temp++;
}
if(!p) printf("Insert Failed");

LinkList s=(Lnode *)malloc(sizeof(Lnode));
s->data=(char *)malloc(sizeof(char)*5);
strcpy(s->data, ins);
s->next=p->next;
p->next=s;
}//在单链表L的第i个元素继续插于入ins

void main()
{
fflush(stdin);
char buff[100],ins[4];
int m;
printf("Plz type in the string:");
gets(buff);
LinkList L;
CreateList(L, buff);

printf("The linklist L is : ");
TraverseList(L);
//printf("%d", flag);

printf("where to insert (m):");
scanf("%d", &m);
printf("what to insert:");
fflush(stdin);
scanf("%s", &ins);
//gets(ins);
InsertList(L, m, ins);
TraverseList(L);
}

⑸ 动态链表插入结点,c语言的!

在while语句运行后,有以下可能:
若head为0,则p2==0,p1==0
若head->next为0,则p2==0,p1==head
若head->num
next!=0
while语句的结果不够明显,导致if语句难以编成。
建议:先判断head是否为空,之后再用while寻找插入点进行插入。
由于现在手头没有编程软件,就没法帮忙编了,请参考建议编吧。

⑹ C语言 单链表插入的代码是

在给定的单链表的第i位上插入值为n的节点。
#include <stdio.h>
#include<malloc.h>
#define N 5
typedef int elemtype;
typedef struct node
{
elemtype data;
struct node *next;
}linklist;

linklist *Creatlist(linklist*L){
L=(linklist*)malloc(sizeof(linklist));
L->next=NULL;
return L;
}
int Judge(linklist *L){
if(L->next==NULL)
{
printf("建表成功...\n");
}
else
printf("建表失败.\n");
return 0;
}
int Input(linklist *L,int x,linklist *r){
int i;
linklist *p;
p=(linklist*)malloc(sizeof(linklist));
p->data=x;
p->next=NULL;
r->next=p;
printf("%d ",p->data);
return 0;
}
int Insert1(linklist *L,int i){
linklist *p,*q,*r,*t;
int j=1,item;
p=L->next;
q=L;
r=L;
if(L->next==NULL)
{
printf("表空.\n");
return 0;
}
else
{
while(p!=NULL&&j<i)
{
q=p;
p=p->next;
j++;
}
if(p==NULL)
{
printf("%d不在表的范围内.\n");
return 0;
}
else
{
t=(linklist*)malloc(sizeof(linklist));
t->next=NULL;
printf("请输入item:");
scanf("%d",&item);
t->data=item;
t->next=p;
q->next=t;
}
printf("在第%d位上插入值为%d的节点后的所有数据为\n",i,item);
for(j=0;j<N+1;j++)
{
r=r->next;
printf("%d ",r->data);
}
printf("\n");
return 1;
}
}
int main()
{
int i,item,k;
linklist *L,*r;
printf("单向链表的创建(包括初始化)与输出\n");
L=Creatlist(L);
Judge(L);
printf("表中的数据为:");
r=L;
Input(L,11,r);
r=r->next;
Input(L,32,r);
r=r->next;
Input(L,17,r);
r=r->next;
Input(L,46,r);
r=r->next;
Input(L,9,r);
r=r->next;
printf("\n");
printf("在给定的单链表的第i位上插入值为item的节点\n");
printf("请输入i:");
scanf("%d",&i);
Insert1(L,i);
return 0;
}

在给定单链表的值为m的节点的前面插入一个值为n的节点
#include <stdio.h>
#include<malloc.h>
#define N 5
typedef int elemtype;
typedef struct node
{
elemtype data;
struct node *next;
}linklist;

linklist *Creatlist(linklist*L){
L=(linklist*)malloc(sizeof(linklist));
L->next=NULL;
return L;
}
int Judge(linklist *L){
if(L->next==NULL)
{
printf("建表成功...\n");
}
else
printf("建表失败.\n");
return 0;
}
int Input(linklist *L,int x,linklist *r){
int i;
linklist *p;
p=(linklist*)malloc(sizeof(linklist));
p->data=x;
p->next=NULL;
r->next=p;
printf("%d ",p->data);
return 0;
}
int Insert2(linklist *L,int item){
linklist *p,*q,*r,*t;
int j=1,m;
p=L->next;
r=L;
q=L;
if(L->next==NULL)
{
printf("表空.\n");
return 0;
}
else
{
while(p!=NULL)
{
if(p->data!=item)
{
q=p;
p=p->next;
}
else
break;
}
if(p==NULL)
{
printf("%d不在表的范围内.\n");
return 0;
}
else
{
t=(linklist *)malloc(sizeof(linklist));
t->next=NULL;
printf("请输入m:");
scanf("%d",&m);
t->data=m;
q->next=t;
t->next=p;
}
}
printf("在值为%d的节点的前面插入一个值为%d的节点后的所有数据为\n",item,m);
for(j=0;j<N+1;j++)
{
r=r->next;
printf("%d ",r->data);
}
printf("\n");
return 1;
}
int main()
{
int i,item,k;
linklist *L,*r;
printf("单向链表的创建(包括初始化)与输出\n");
L=Creatlist(L);
Judge(L);
printf("表中的数据为:");
r=L;
Input(L,11,r);
r=r->next;
Input(L,32,r);
r=r->next;
Input(L,17,r);
r=r->next;
Input(L,46,r);
r=r->next;
Input(L,9,r);
r=r->next;
printf("\n");
printf("在给定单链表的值为item的节点的前面插入一个值为m的节点\n");
printf("请输入item:");
scanf("%d",&item);
Insert2(L,item);
return 0;
}

⑺ C语言代码创建一个链表,并对链表进行插入元素,删除元素和销毁链表操作。并写出测试用例。

已在VC6环境下调试通过.
#include<stdio.h>
#include<string.h>
#include<malloc.h>
struct student
{
long number;
char name[8];
float score;
struct student *next;
}*head=NULL;
int sum=0; //计数

void main()
{
void show();
void insert();
void del();
char command[6];
printf("***********************************************************\n");
printf(" 链表综合练习程序\n\n");
printf("***********************************************************\n");
while(1)
{ printf("请输入操作命令,(输入help查看帮助):\n");
scanf("%s",command);
if(strcmp(command,"exit")==0) break; //输入exit结束循环
else if(strcmp(command,"insert")==0) insert();
else if(strcmp(command,"show")==0) show();
else if(strcmp(command,"insert")==0) insert();
else if(strcmp(command,"del")==0) del();
else if(strcmp(command,"help")==0)
{ printf("命令名\t\t\t命令说明\n\n");
printf("help \t\t\t查看帮助\n");
printf("show \t\t\t显示内容\n");
printf("insert\t\t\t插入内容\n");
printf("del \t\t\t删除信息\n");
printf("exit \t\t\t退出程序\n\n");
}
else printf("命令无效,请重新输入.(输入help查看帮助)\n");
}
printf("Bye\n");
}
void show()
{
if(head==NULL)printf("没有任何记录\n\n");
else
{ struct student *i;
printf("学号\t姓名\t分数\n");
for(i=head;i!=NULL;i=i->next)
printf("%ld\t%s\t%.2f\n",i->number,i->name,i->score);
printf("共有%d条学生记录\n\n",sum);
}
}
void insert()
{
printf("请按以下格式依次软每项,各项用空格分开\n");
printf("学号\t姓名\t分数\n");
struct student *i,*p,*j;
p=(struct student *)malloc(sizeof(struct student));
scanf("%ld%s%f",&p->number,p->name,&p->score);
if(head==NULL){head=p;head->next=NULL;} //链表为空时
else
{ for(i=head;i->next!=NULL && p->number>i->number;j=i,i=i->next);
if(p->number<=i->number)
{ if(i==head)head=p; //插到最前面
else j->next=p; //插到中间
p->next=i;
}
else
{ p->next=NULL;
i->next=p;
}
}
sum++;
printf("操作成功\n\n");
}
void del()
{
if(head==NULL)printf("错误:尚未输入任何记录\n"); //链表为空时
else
{ long number;
struct student *i,*j;
printf("请输入要删除的学生的学号:");
scanf("%ld",&number);
for(i=head;i->next!=NULL && i->number!=number;j=i,i=i->next);
if(i->number==number)
{ if(i==head)head=i->next;
else j->next=i->next;
sum--;
free(i);
printf("删除成功\n\n");
}
else printf("未找到输入的学号,请核对后输入\n");
}
}

⑻ 在链表中间删除/插入一个元素 c语言编程//帮我完成

int insert(LinkList *p,DataType x)
{
LinkList *p1=p;
p=(LinkList *)malloc(sizeof(LinkList));
p->data=x;
p->next=p1;
}

int deletelist(LinkList *p)
{
LinkList *p1=p->next;
p->next=p1;
}

⑼ c语言链表插入的问题

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef struct
{
int num;
char name[10];
int grade;
}student;

typedef struct node
{
student date;
struct node *next;
}*link;

link head = NULL;
student creat(void)
{
student p;
printf("请输入学生学号:");
setbuf(stdin,(char *)0);
scanf("%d",&p.num);
printf("请输入学生名字:");
setbuf(stdin,(char *)0);
scanf("%s",p.name);
printf("请输入学生成绩:");
setbuf(stdin,(char *)0);
scanf("%d",&p.grade);
return p;
}

void insert(student date)
{
link p = (struct node*)malloc(sizeof *p);
p->date=date;
p->next=head;
head=p;
}

void output(void)
{
link p = head;
printf("|----学号-----姓名-------成绩--|\n");
while(p!=NULL)
{
printf("| %-9d%-11s%-6d|\n",p->date.num,p->date.name,p->date.grade);
p=p->next;
}
printf("|------------------------------|\n");
}
void init(void)
{
puts("*************欢迎使用信息查询系统*************");
puts("*\t+-------------------------+ *");
puts("*\t| 1.添加记录 | *");
puts("*\t| 2.显示所有记录 | *");
puts("*\t| 0.保存退出 | *");
puts("*\t+-------------------------+ *");
puts("********************************************");
printf("\t请输入您的选择:");
}

int main()
{
int n;
char cmd[10];
do{
//system("cls");
men: init();
setbuf(stdin,(char *)0);//清空输入流
scanf("%[^\n]",cmd);//接受除换行以外的所有字符存入cmd中,并加上'\0'标志
sscanf(cmd,"%d",&n);
/*处理当命令不符合条件的情况*/
if(strlen(cmd) != 1 || n < 0 || n >2 || !(*cmd >= '0' && *cmd <= '2'))
{
printf("\t输入错误或没有这个选项!");
getchar();
getchar();
goto men;
}
switch(n)
{
case 1:insert(creat());puts("\t添加成功!");break;
case 2:output();break;
case 0: return 0;
default :break;
}
printf("\tPress Enter To Continue!");
getchar();
getchar();
}while(n != 0);
return 0;
}

⑽ C语言插入链表

你这个也是对的。
其实这个时候p就是q->next。
你这样做,不太好,因为要注意一个原则:
插入指针要先让新指针的next指向插入点的next,再让插入点的next指向新指针。
这样保险。
你的方法在复杂情况下会容易出错。