c语言程序设计链表
❶ 如何实现c语言链表
链表的创建:
 
#include “stdlib.h”
#include “stdio.h”
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
long num;
float score;
struct student *next;
};
 
int n;
struct student *creat(void)
{
  struct student *head;
  struct student *p1,*p2;
  n=0;
  p1=p2=(struct student *)malloc(LEN);
  scanf(“%ld,%f”,&p1->num,&p1->score);
  head=NULL;
  while(p1->num != 0)
  {
   n=n+1;
   if(n == 1)
    head = p1;
   else
    p2->next = p1;
   p2 = p1;
   p1 = (struct student *)malloc(LEN);
      scanf(“%ld,%f”,&p1->num,&p1->score);
  }
  p2->next = NULL;
  return(head);
}
 
void main()
{
 creat();
}
 
这样便可创建链表
❷ c语言程序设计——链表的应用
#include <stdio.h> 
#include <stdlib.h> 
#include <malloc.h> 
#include <string.h> 
#define ID struct id 
struct id 
{
 char name[20]; 
 int num;         
 int a;
 int b;
 int c;
 double ave;
 ID *next;         //
}; 
int pc=0;
ID *creat() 
{ 
 ID *p1,*p2,*head; 
 int pd; 
 p1=p2=head=NULL; 
 printf("\t\t\t 开始输入记录(学号0结束)!\n");  
 while(1) 
 {  
  printf("请输入学生的学号:\n");scanf("%d",&pd);
  if(pd==0) break;
  p1=(ID*)malloc(sizeof(ID));
  p1->num=pd;
  printf("请输入学生的姓名:\n");scanf("%s",p1->name); 
  printf("请输入学生的语文成绩:\n");scanf("%d",&p1->a);
  printf("请输入学生的数学成绩:\n");scanf("%d",&p1->b);
  printf("请输入学生的外语成绩:\n");scanf("%d",&p1->c);
  p1->ave=(p1->a+p1->b+p1->c)/3.0;
   
  if(head==NULL)
  { 
   head=p1; 
   p2=p1;
  } 
  else 
  { 
   p2->next=p1; 
   p2=p1; 
  }  
  pc++;
 }  
   p2->next=NULL; 
   return(head); 
} 
ID *sort(ID *head)
{
 int temp;
 char str[100];
 double dbl;
 ID *p1,*p2;
 for(p1=head;p1!=NULL;p1=p1->next)
 {
  
  for(p2=p1->next;p2!=NULL;p2=p2->next)
  {
   if(p1->ave<p2->ave)
   {
    temp=p1->num;
    p1->num=p2->num;
    p2->num=temp;
    strcpy(str,p1->name);
    strcpy(p1->name,p2->name);
    strcpy(p2->name,str);
    temp=p1->a;
    p1->a=p2->a;
    p2->a=temp;
    temp=p1->b;
    p1->b=p2->b;
    p2->b=temp;
    temp=p1->c;
    p1->c=p2->c;
    p2->c=temp;
    dbl=p1->ave;
    p1->ave=p2->ave;
    p2->ave=dbl;    
   }
  }
 }
 printf("排序成功!!!\n");
 return (head);
}
/*输入/添加记录*/ 
ID *insert(ID *head) 
{ 
 ID *temp,*p1,*p2; 
    printf("插入操作开始!!!\n");
    temp=(ID *)malloc(sizeof(ID)); 
       printf("请输入学生的学号:\n");scanf("%d",&temp->num); 
    printf("请输入学生的姓名:\n");scanf("%s",temp->name); 
       printf("请输入学生的语文成绩:\n");scanf("%d",&temp->a);
    printf("请输入学生的数学成绩:\n");scanf("%d",&temp->b);
    printf("请输入学生的外语成绩:\n");scanf("%d",&temp->c); 
    temp->ave=(temp->a+temp->b+temp->c)/3.0;
    if (head==NULL) 
    { 
     head=temp; 
     temp->next=NULL; 
    } 
    else 
    {
     p1=head;
     while(p1!=NULL && p1->ave > temp->ave) 
     {  
      p2=p1; 
      p1=p1->next; 
     } 
     p2->next=temp; 
     temp->next=p1;
    } 
    printf("插入成功"); 
    pc++;
    return (head); 
} 
/*删除学生记录*/ 
ID *delet(ID *head) 
{ 
 ID *p1,*p2; 
 int num; 
 printf("请输入要删除的学生的学号:");scanf("%d",&num); 
 p1=head; 
 if (head==NULL) 
 { 
  printf("没有记录\n"); 
  goto end; 
 } 
 while(num!=p1->num && p1!=NULL) 
 { 
  p2=p1;p1=p1->next; 
 } 
 if(num==p1->num)   
 { 
  if (p1==head) 
   head=p1->next; 
  else 
   p2->next=p1->next; 
  printf("删除成功!!!\n"); 
  pc--;
 } 
end:return head; 
} 
/*查找学生记录*/ 
ID *search(ID *head) 
{ 
 ID *p1,*p2; 
 char str[100];
 printf("请输入要查找的学生的姓名:");scanf("%s",str); 
 p1=head; 
 while(strcmp(str,p1->name) && p1!=NULL) 
 { 
  p2=p1;p1=p1->next; 
 } 
 if(strcmp(str,p1->name)==0)   
 { 
  printf("学生的学号:%d\n",p1->num);
  printf("学生的姓名:%s\n",p1->name);
  printf("学生的语文成绩:%d\n",p1->a); 
  printf("学生的数学成绩:%d\n",p1->b); 
  printf("学生的外语成绩:%d\n",p1->c); 
  printf("学生的平均成绩:%.2lf\n",p1->ave); 
 } 
 return head;
} 
/*显示结果函数*/ 
void print(ID *head)
{ 
   ID *p; 
   p=head; 
   printf("\t\t\t*****************\n"); 
   printf("显示结果是:\n"); 
   if(head!=NULL) 
    do
 { 
      printf("%10d%10s%10d%10d%10d%10.2lf\n",p->num,p->name,p->a,p->b,p->c,p->ave); 
   p=p->next; 
 } while(p!=NULL); 
} 
   
void main() 
{ 
 ID *head=NULL; 
 int choise; 
 printf("\t\t\t* * * * C语言课设* * * *\n"); 
 while(1) 
 {     
  printf("\t\t            学生信息管理系统\n"); 
  printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); 
  printf("\t\t  1.输入\n");
  printf("\t\t  2.显示\n");
  printf("\t\t  3.查找\n");
  printf("\t\t  4.排序\n"); 
  printf("\t\t  5.插入\n"); 
  printf("\t\t  6.删除\n"); 
  printf("\t\t  0.退出\n"); 
  printf("\n"); 
  printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); 
  printf("请选择(0-6):"); 
  scanf("%d",&choise); 
  switch(choise) 
  { 
  case 1: head=creat(); 
   break; 
  case 2: print(head); 
   break; 
  case 3: head=search(head); 
   break; 
  case 4: head=sort(head); 
   break; 
  case 5: head=insert(head); 
   break; 
  case 6: head=delet(head);
   break;
  case 0: 
   exit(0); 
   break; 
  default :printf("输入错误,请重新输入!\n"); 
  } 
 } 
}
❸ c语言链表程序设计
#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
InsertList(LinkList
L)
{
LinkNode
*
Node;
LinkNode
*
p
=
L;
LinkNode
*pre
;
Node
=
(LinkNode*)malloc(sizeof(LinkNode));
Node->next
=
NULL;
printf("\n请输入您要插入的数据:");
scanf("%d",&Node->data);
while(
p
!=
NULL
&&
p->data
<=
Node->data)
{
pre
=
p;
p
=
p->next;
}
Node->next
=
p;
pre->next
=
Node;
printf("\n插入成功!");
}
//删除单链表元素
void
DelList(LinkList
L)
{
LinkNode
*
p
=
L;
LinkNode
*
pre;
int
value;
printf("\n请输入您要删除的数据:");
scanf("%d",&value);
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);
printf("\n删除成功!");
}
}
//打印单链表
void
Print(LinkList
L)
{
LinkNode
*p
=
L->next;
while(p
!=
NULL)
{
printf("%-4d",p->data);
p
=
p->next;
}
printf("\n");
}
//菜单
void
menu(LinkList
L)
{
char
ch;
do{
system("cls");
printf("----------------菜单---------------\n");
printf("
1.插入一个节点\n");
printf("
2.删除一个节点\n");
printf("
3.打印单链表\n");
printf("
4.推出程序\n\n");
printf("请输入您要进行的操作:");
ch
=
getch();
if(ch
>='1'
&&
ch<'5')
{
printf("%c\n",ch);
getch();
switch(ch)
{
case
'1':
InsertList(L);
break;
case
'2':
DelList(L);
break;
case
'3':
Print(L);
break;
case
'4':
return;
}
getch();
}
}while(ch
!=
'4');
}
void
main()
{
LinkList
L;
InitList(&L);
menu(L);
}
❹ 用C语言实现建立一个单链表的过程,并实现打印链表中每一个元素,写出完整程序
这是个很简单的链表创建和输出
#include<stdio.h>
#include<stdlib.h>
typedef struct linkednode
{
char data;
struct linkednode *next;
}node,*link_list;//链表节点的结构及重命名
link_list creat()//创建一个链表返回类型是链表的首地址
{
link_list L;
node *p1,*p2;
char data;
L=(node*)malloc(sizeof(node));//开辟存储空间
p2=L;
while((data=getchar())!=' ')//输入回车键时结束输入
{
p1=(node*)malloc(sizeof(node));
p1->data=data;
p2->next=p1;
p2=p1;
}
p2->next=NULL;
return L;
}
void print(link_list L)//把链表输出
{
node *p;
p=L->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf(" ");
}
void main()
{
link_list L=NULL;
char x;
printf("请输入链表节点: ");
L=creat();
print(L);
}
❺ 用c语言创建链表
主函数这里
LinklistList;
printf("输入创建链表的长度:");
scanf("%d",&num);
CreateList_H(List,num); //创建链表
改为
LNodeList;
printf("输入创建链表的长度:");
scanf("%d",&num);
CreateList_H(&List,num); //创建链表
函数内在堆上分配好内存,但是 没有传递到栈上
另外你的变量名很迷人
❻ c语言编程问题 链表
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。
每个结点包括两个部分:
1、存储数据元素的数据域;
2、存储下一个结点地址的指针域。
在C语言中,链表的构建是通过结构体实现的,一个结构体变量,形成一个链表的节点。
在结构体内,需要由至少一个类型为结构体本身类型的指针的元素,作为指针域存在,用来指向下一个或者上一个(仅用于双向链表)元素节点。
❼ C语言程序设计对链表的综合操作
你只是给了
主函数
,其他函数都没有给,
结构体
的内容也没有给,如果是
链表
的话,是把插入的数据向新建的结点复制后往
头结点
后面接,应该不存在冲掉,除非你的insert操作是直接把stu这个结点接在head后面,那就相当于给head的next域重复赋值,那就冲掉了,
感觉你
这里说的插入就是给head后面一个结点的next赋stu的值,而不是新建一个结点,因此就冲掉了
❽ 用C语言编写一个链表
看完你下面的追问 其实 意思是 
让你把一个已有的 单链表 
变成反向的单链表 对吧
❾ 如何用C语言编写一个链表
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
struct Node
{
	int data;//数据域
	struct Node * next;//指针域
};
/*************************************************************************************
*函数名称:Create
*函数功能:创建链表.
*输入:各节点的data
*返回值:指针head
*************************************************************************************/
struct Node * Create()
{
	struct Node *head,*p1,*p2;
	head = NULL;
	p1 = p2 = (struct Node *)malloc(sizeof(struct Node));
	printf("Input the linklist (Input 0 to stop):\n");
	scanf("%d",&p1->data);
	while(p1->data!=0)
	{
		if(head == NULL){
			head = p1;
		}else{
			p2->next = p1;
			p2 =p1;
		}
		p1 = (struct Node *)malloc(sizeof(struct Node));
		scanf("%d",&p1->data);
	}
	p2->next = NULL;
	return head;
}
/*************************************************************************************
*函数名称:insert
*函数功能:在链表中插入元素.
*输入:head 链表头指针,p新元素插入位置,x 新元素中的数据域内容
*返回值:无
*************************************************************************************/
void insert(struct Node * head,int p,int x)
{
	struct Node * tmp = head;
	struct Node * tmp2 ;
	int i ;
	for(i = 0;i<p;i++)
	{
		if(tmp == NULL)
			return ;
		if(i<p-1)
			tmp = tmp->next;
	}
	tmp2 = (struct Node *)malloc(sizeof(struct Node));
	tmp2->data = x;
	tmp2->next = tmp->next;
	tmp->next = tmp2;
}
/**************************************************************************************
*函数名称:del
*函数功能:删除链表中的元素
*输入:head 链表头指针,p 被删除元素位置
*返回值:被删除元素中的数据域.如果删除失败返回-1
**************************************************************************************/
int del(struct Node * head,int p)
{
	struct Node * tmp = head;
	int ret , i;
	for(i = 0;i<p;i++)
	{
		if(tmp == NULL)
			return -1;
		if(i<p-1)
			tmp = tmp->next;
	}
	ret = tmp->next->data;
	tmp->next = tmp->next->next;
	return ret;
}
/**************************************************************************************
*函数名称:print
*函数功能:打印链表中的元素
*输入:head 链表头指针
*返回值:无
**************************************************************************************/
void print(struct Node *head)
{
	struct Node *tmp;
	for(tmp = head; tmp!=NULL; tmp = tmp->next)
		printf("%d ",tmp->data);
	printf("\n");
}
/**************************************************************************************
*函数名称:main
*函数功能:主函数创建链表并打印链表。
**************************************************************************************/
int main(){
	struct Node * head = Create();
	print(head);
	return 0;
}
❿ 使用C语言创建一个动态链表
可以用头插法或尾插法
(下面用尾插法)
思想为:让你输入一串字符串,为每个字符创建一个节点,添加到链表的后面.直到输入的字符为@为止.
#include<stdio.h>
#include<malloc.h>
typedefchardatatype;
typedefstructnode
{
datatypedata;
structnode*next;
}linklist;
linklist*p,*q,*head;
main()
{
charc;
head=(linklist*)malloc(sizeof(linklist));
head->next=null;
p=head;
c=getchar();
while(c!='@')
{
q=(linklist*)malloc(sizeof(linklist));
q->data=c;
q->next=null;
p->next=q;
p=p->next;
c=getchar();
}
}
可以在main()最后加上
for(p=head->next;p!=null;p=p->next)
{
printf("%5c",p->data);
}
来测试结果,本人已经tc2.0下面测试通过.
