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

c语言链表的插入程序

发布时间: 2022-01-13 09:31:31

c语言链表插入程序(包括主函数)

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

typedef int elemType;
typedef struct linkedList
{
elemType data;
struct linkedList *next;
}Llist;
//插入节点函数
void Insert_Node(Llist *h,elemType d)
{
//头插法
Llist *p,*n;
p=h->next;
n=(Llist *)malloc(sizeof(Llist));
n->data=d;
n->next=p;
h->next=n;
}
//输出链表函数
void Display_Nodes(Llist *h)
{
Llist *p;
for (p=h;p->next!=NULL;p=p->next)
printf("%d\n",p->next->data);
}
//主函数
int main()
{
Llist *h;
int i;
//创建链表头节点
h=(Llist *)malloc(sizeof(Llist));
h->data=0;
h->next=NULL;
//插入节点
printf("请输入数字,输入Ctrl+Z结束输入:\n");
while (scanf("%d",&i)!=EOF)
Insert_Node(h,i);
//输出链表
Display_Nodes(h);
getch();
}

② 你好,请问一下怎么用C语言编写单链表插入节点程序,万分感谢!

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

#define FALSE 0
#define TRUE 1

// insertNode2:把newValue的值插入到递增排序的链表中,正确返回TRUE,错误返回FALSE
// nextp是指向当前节点的指针,最初是头指针
int insertNode2(Node **nextp, int newValue)
{
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)
return FALSE;
newNode->value = newValue;

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

return TRUE;
}

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

int insertNode(Node **rootp, int newValue);
int insertNode2(Node **nextp, int newValue);

int main()
{
srand(time(0));

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

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

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

getchar();
getchar();
return 0;
}

③ 用C语言编写单链表的插入与删除

放心吧,我已经运行过N次了,要知道我们也是上机调试好了的嘛,呵呵....

下面这个程序是我们上机试验的,功能跟你想的基本上一样了,呵呵!纯属巧合......
对了,这个程序中#define list_init_size 100是给改顺序表初始化为100个元素空间,但是可以不输满,可以随便改后面那个数,但是你最初输入只能<=list_init_size个.
在后面插入时候要是满了的话,顺序表的长度可以每次加10个.你可以直接运行参考参考...
#include<stdio.h>
#include<stdlib.h>
#define list_init_size 100
#define listincrement 10
#define overflow -2
typedef int status;
typedef int elemtype;
typedef struct
{
elemtype *elem;
int length;
int listsize;
} sqlist;
status initlist_sq(sqlist &L)
{
L.elem=(elemtype *)malloc(list_init_size * sizeof(elemtype));
if(!L.elem) exit(overflow);
L.length=0;
L.listsize=list_init_size;
return 1;
}
status listinsert_sq(sqlist &L, int i ,elemtype e)
{
int * q , *p ,* newbase;
if(i<1 || i>L.length + 1) return 0;
if(L.length >= L.listsize)
{
newbase=(elemtype *)realloc(L.elem,(L.listsize+listincrement) * sizeof(elemtype));
if(!newbase) exit (overflow);
L.elem=newbase;
L.listsize+=listincrement;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]) ;p>=q ;--p)
*(p+1) = *p;
*q = e;
++L.length;
return 1;
}
status listdelete_sq(sqlist &L, int i, elemtype &e)
{
int *p ,*q ;
if((i<1) || (i>L.length)) return 0;
p=&(L.elem[i-1]);
e=* p;
q=L.elem + L.length - 1;
for(++p ;p<=q ;++p)
*(p-1)=*p;
--L.length;
return 1;
}
status locateelem_sq(sqlist &L, elemtype e)
{
for(int pass=1 ;pass<=L.length ;pass++)
{
if(L.elem[pass-1]==e)
return pass;
}
return 0;
}
int main()
{
int i, e, swich_sq, pa;
sqlist L;
initlist_sq(L);
printf("请设置字符的长度:\n");
scanf("%d",&L.length);
if(L.length<=0 || L.length>list_init_size)
{
printf("错误的输入!\n");
return 0;
}
for( pa=1;pa<=L.length; pa++)
{
printf("请输入数组第%d个数!\n",pa);
scanf("%d",&L.elem[pa-1]);
}
do{
printf("\n\n当前的数是: ");
for (pa=0;pa<L.length;pa++)
{
printf("%d ",L.elem[pa]);
}
printf("\n请输入要执行的操作:\n 1,插入一个数\n 2,删除一个数\n 3,查找一个数\n 0,退出程序\n");
scanf("%d",&swich_sq);
switch(swich_sq)
{
case 1:
printf("请输入要插入数的位置:\n");
scanf("%d",&i);
if (i>=1 && i<=L.length)
{
printf("请输入要插入的数的值:\n");
scanf("%d",&e);
listinsert_sq(L,i,e);
}
else printf("\n\n\n输入不正确!\n");
break;
case 2:
printf("请输入要删除的数的序号:\n");
scanf("%d",&i);
if (i>=1 && i<=L.length)
{
listdelete_sq(L,i,e);
printf("你删除的数是L.elem[%d] = %d",i-1,e);
}
else printf("\n\n\n你的输入不正确!\n");
break;
case 3:
printf("请输入要查找的数:\n");
scanf("%d",&e);
if (locateelem_sq(L,e)!=0)
{
printf("你查找的数在结构中,并且是第%d个数!\n",locateelem_sq(L,e));
}
else printf("\n\n\n你输入的数不在结构中!\n");
break;
}
}
while (swich_sq != 0);
free (L.elem);

}

④ 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语言链表的添加的代码

struct node
{
int count;
node* next;
};
...............
node* first = new node();//首节点
node* temp = new node();//每次给他赋值
first.next -> temp;//把temp的地址给 first.next
for(int i = 0; i < 99; ++i)
{
temp.next = new node();//创建新node并赋值给next
temp -> temp.next;//新创建的赋值给temp,以进行下一次创建
}
很久没写c了,写法应该不太对,记得当时是用malloc,但是链表操作大致是这个思路

⑥ C语言,写一个链表的插入删除和打印的程序

#include
#include
#include

typedef struct Node
{
int date;
struct Node * pNext;
}NODE, *PNODE;

//函数声明
PNODE creat_list();//创建链表
void traverse_list(PNODE pHead); //输出链表
void Insert(PNODE pHead,int pos,int e); //pos 为插入位置 e为插入的数据
void Delete(PNODE pHead,int pos,int *e);
//pos 为删除链表第pos个数 e存放被删除的数据

int main()
{

int e;
PNODE pHead = NULL;
pHead = creat_list();
traverse_list(pHead);
Insert(pHead,2,99);
traverse_list(pHead);
Delete(pHead,3,&e);
printf("被删除的数据为 %d\n",e);
traverse_list(pHead);

return 0;
}

PNODE creat_list()
{
int len;//用来存放有效结点的个数
int i;
int val;//用来临时存放有效结点的数据

PNODE pHead = (PNODE)malloc(sizeof(NODE));
//创建一个不存放数据的结点,pHead 为头指针

if (pHead == NULL)
{
printf("内存分配失败,程序终止!\n");
exit(-1);
}

PNODE pTail = pHead;
pTail->pNext = NULL;

printf("请输入你需要生成的链表的个数:len = ");
scanf("%d",&len);

for (i = 0; i < len; i++)
{
printf("请输入第%d个节点的值:",i+1);
scanf("%d",&val);

PNODE pNew = (PNODE)malloc(sizeof(NODE));
//当i = 0 时,创建的第一个结点是首结 每创建一个新结点
if (pNew == NULL)
{
printf("内存分配失败,程序终止!\n");
exit(-1);
}
pNew->date = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}
return pHead;
}

void traverse_list(PNODE pHead)
{
PNODE p = pHead->pNext;
while(NULL != p)
{
printf("%d ",p->date);
p = p->pNext;
}
printf("\n");
return;
}

void Insert(PNODE pHead,int pos,int e)
{
int j = 0;
PNODE p, s;
p = pHead;
while(p && j < pos - 1)
{
p = p->pNext;
j++;
}
if(!p || j > pos - 1)
exit(-1);
s = (PNODE)malloc(sizeof(NODE));
s->date = e;
s->pNext = p->pNext;
p->pNext = s;
}

void Delete(PNODE pHead,int pos,int *e)
{
int j = 0;
PNODE p, r;
p = pHead;
while(p && j < pos - 1)
{
p = p->pNext;
j++;
}
if(!p->pNext || j > pos - 1)
exit(-1);
r = p->pNext;
p->pNext = r->pNext;
*e = r->date;
free(r);
}

⑦ c语言单链表插入源代码

lz看看这个代码吧:lz的代码有太多的错误,需要慢慢的练练自己的编程的能力,
http://..com/team/view/我love编程
我的团队,可以交流一下:
代码:
#include<stdio.h>
#include<iostream.h>
#include<malloc.h>
#define N 10
struct list
{ int max;
int n;
int *a;

};
typedef struct list pseqlist;
pseqlist *creatmulllist_seq()//创建空表
{ struct list *palist;
palist=(pseqlist *)malloc(sizeof(pseqlist ));
if(palist!=NULL)
{ palist->a=(int *)malloc(sizeof(int)*N);
if(palist->a)
{
palist->n=0;
return palist;
}
}

}
pseqlist *insert_sep(pseqlist *p,int m)//输入数组
{ int i,k;
p->n=m;
printf("输入数组:\n");
for(i=0;i<m;i++)
{ scanf("%d",&k);
p->a[i]=k;

}
return p;

}
int insertPost_sep(pseqlist *q,int p,int x)//插入x
{ int i;
if(p<0||p>q->n-1)return 0;
else { q->n++;
for(i=q->n-1;i>p;i--)
q->a[i]=q->a[i-1];
q->a[p]=x;
return 1;
}
}

void main ()
{ int m,p,x,i,k;

printf("输入数组的长度:\n");
scanf("%d",&m);

pseqlist *palist;
palist=creatmulllist_seq();//创建空表
insert_sep(palist,m);//输入数组
printf("输入要插入的位置:\n");
scanf("%d",&p);
printf("输入要插入的数:\n");
scanf("%d",&x);
k=insertPost_sep(palist,p,x);//插入
if(k)for(i=0;i<palist->n;i++)
printf("%3d",palist->a[i]);
else printf("没有插入成功");
printf("\n");

}
测试:

输入数组的长度:
10
输入数组:
1 2 3 4 5 6 7 8 9 10
输入要插入的位置:
3
输入要插入的数:
20
1 2 3 20 4 5 6 7 8 9 10
Press any key to continue

⑧ 编写一个简单的C语言链表插入程序!

我们可以用实际的值来看看程序到底是怎么执行的。
假设你创建的链表里已经有学号为1,2,4,5的四个学生的信息。
现在我们要插入学号为3的学生的信息。

首先:
struct student * insert(struct student *head,struct student *stu)
实参被传递过来,*head是已经创建的学生信息,*stu是要插入的学生信息。

struct student *p0,*p1,*p2;

p1 = head; //让p1指向头节点
p0 = stu; //p0指向要插入的节点

if(head == NULL) //这个是检查链表是不是空的
{
head = p0; //如果是空的就把要插入的结点,设置为头指针。
p0->next = NULL;
}
else
{

while((p0->num > p1->num) && (p1->next != NULL))
{ 在这个循环里,第一次进循环的时候p0->num等于3,p1->num等于1,即3>1,而且p1后面(即p1->next)还有结点。满足条件进入第二次循环。

在进第二次循环之前需要把p1指向第2个结点,即指向学号为2的学生信息。
p2 = p1; //p2指向p1的结点 ,即头指针。
p1 = p2->next; //p1移到下一个结点,现在指向的是第2个结点。

第二次进循环的时候p0->num等于3,p1->num等于2,即3>2,而且p1后面还有结点。满足条件进入第三次循环

再次把p1移到下一个结点。
p2 = p1; 这时p2指向的是第2个结点。
p1 = p2->next; p1指向的是第3个结点。

第三次进循环的时候p0->num等于3,p1->num等于4,即3>4。不能满足条件。退出循环。
}
现在p2指向的是第2个结点,即学号为2的学生。
p1指向的是第3个结点,即学号为4的学生。
p0始终是要插入的学生。

if(p0->num <= p1->num)
{ 这里p0->num等于3,p1->num等于4,即3<4满足条件。
if(head == p1)
{ 这里p1指向的是第三个结点,所以不能满足条件。程序到下面else语句。
head = p0;
}
else
{ p2->next = p0;
到了这里p2的指针域指的是要插入的结点,即把学号为3的学生放到学号为2的学生后面。
}

p0->next = p1;
//然后这里把p1(学号为4)放到p0(学号为3)的后面。这样就连在一起了。
}
else
{
p1->next = p0;
p0->next = NULL; //把要插入的结点,设置为尾结点。
}
}
n=n+1;
return (head);
}

⑨ C语言实现的双向链表插入程序

//双向链表
#include<stdio.h>
#include <malloc.h>
typedef struct node
{
int i;
struct node *next,*prior;
}node;

node* create_list()
{
int a[]={1,2,3,8,9};
int j;
node *head,*p1,*p2;
p2=head=(node *)malloc(sizeof(node));
head->i=a[0];
head->next=head->prior=NULL;
for(j=1;j<5;j++)
{
p1=(node *)malloc(sizeof(node));
p1->i=a[j];
p1->prior=p2;
p1->next=NULL;

p2->next=p1;
p2=p1;
}
return head;
}

node * insert_list(node *head,int i,int num)
{
node *p,*q;
int j;

for(j=0,p=head;j<i&&p->next;j++)
{
p=p->next;
}

q=(node *)malloc(sizeof(node));
q->i=num;

q->prior=p->prior;
q->next=p;
if(i==0)//插入结点作为表头
{
head=q;
}
else
{
p->prior->next=q;
}
p->prior=q;

return head;
}

void printf_list(node *head)
{
node *p;
for(p=head;p;p=p->next)
{
printf("%d\t",p->i);
}
printf("\n");
}

void main()
{
struct node *head;

int i,num;
head=create_list();
printf_list(head);

scanf("%d",&i);
scanf("%d",&num);
head=insert_list(head,i,num);
printf_list(head);
}

⑩ “单链表的插入与删除”的c语言程序是什么啊

用C语言编写如下程序,并上机验证通过:
设自线性表LA=(3,5,8,11)和LB=(2,6,9,11,15,20)
1.若LA和LB分别是两个集合A和B,求新集合A=AUB(\'并\'操作,相同元素不得留)预测输出LA=(3,5,8,11,2,6,8,9,11,15,20)
2.将LA和LB表归并,要求仍有序(相同元素要保留)预测输出LC=(2,3,5,6,8,8,9,11,11,15,20)
分别用数组和指针实现,其4个子程序.