struct student{ char strID[256]; char strName[256]; char strClass[256]; struct student pNext;}; main(){struct student node = new student();
struct student head = NULL;
memset(&node,0,sizeof(student));
head = node;
// 自己赋值node->strID等数据 node->pNext = new student();
memset(&node,0,sizeof(student));
// 自己赋值node->strID等数据 node->pNext = new student();
memset(&node,0,sizeof(student));
// 自己赋值node->strID等数据 } // 这是3个学生数据的单链表,没用循环做,你可以自己根据需要修改一下
恩 我看看
我已经帮你改好了 部分地方加了注释!如还有疑问发百度的短消息给我!
#include <stdioh>
#include "conioh"
#include "mathh"
#include "malloch"
#define null 0
struct id
{
int num;
char name[10];
struct id next;
};
struct id input()
{
struct id a,b,c;
int n;
b=c=(struct id )malloc(sizeof(struct id));
b->next=c->next=null;
b = a = c; //这里修改了 a=null;
printf("input num :");
scanf("%d",&c->num);
printf("input name:");
scanf("%s", c->name);
//for(n=1;c->num!=0;n++);
for(n=1;c->num!=0;n++) //这里的';'去掉 它造成了这里的死循环
{
//这里以上的代码进行了修改 逻辑上有问题
c=(struct id )malloc(sizeof(struct id));
printf("input num : (input '0' exit!)");
scanf("%d",&c->num);
if(c->num == 0) ///增加的代码 这里以下都进行了修改
break;
printf("continue input name: ");
scanf("%s", c->name);
b->next=c;
c->next=null;
b=c;
}
return(a);
}
void print(struct id head)
{
printf("\nPrinting All The Infomation\n");
while(head!=null)
{
//printf("%d %s\n",&head->num,head->name);
printf("num:%d name:%s\n",head->num,head->name); //如果用上句中的&head->num 那么打印出的是head->num变量的地址 不知你是否是这个用意
head=head->next;
}
}
void main()
{
struct id head;
head=input();
print(head);
printf("Enter any key to exit!");
getch();
}
//只要把p2->next=p1; p2=p1;这句后移几行,要先把P1覆盖后再输入
#include<stdioh>
#include<conioh>
#include<stdlibh>
#include<stringh>
#include<malloch>
#define zero printf("");
#define zero4 printf(" 学生信息显示 ");
#define zero5 printf(" 姓名 学号 成绩\n");
#define LEN sizeof(struct student)
#define zero3 printf("----------------------------学生信息输入--------------------------------------");
struct student
{
int num;
int score;
char name[20];
struct student next;
}head;
struct student creat(struct student head)
{
struct student p1,p2;int i=0;char temp;
p1=p2=head=(struct student )malloc(LEN);
zero3
printf("请输入学生姓名:");
scanf("%s",p1->name);
printf("请输入学生学号:");
scanf("%d",&p1->num);
printf("请输入学生成绩:");
scanf("%d",&p1->score);
while(temp!='n')
{
if(i==0)
{
head=p1;
i++;
printf("是否继续输入Y|N\n");
if(getch()=='n')
{
p1->next=NULL;
system("cls");
return head;
}
}
else
{
p1=(struct student )malloc(LEN);
printf("请输入学生姓名:");
scanf("%s",p1->name);
printf("请输入学生学号:");
scanf("%d",&p1->num);
printf("请输入学生成绩:");
scanf("%d",&p1->score);
p2->next=p1; //这句移到这里就可以了
p2=p1;
printf("是否继续输入Y|N\n");
temp=getch();
}
}
p2->next=NULL;
return head;
}
void print(struct student head)
{
struct student p;
p=head;
zero
zero4
zero
zero5
while(p!=NULL)
{
printf(" %-13s%-16d%-16d\n",p->name,p->num,p->score);
p=p->next;
zero
}
}
main()
{
head=creat(head);
system("cls");
print(head);
}
看一看我怎么删这个链表的,应该对你有启发
#include<stdioh>
#include<stdlibh>
typedef int datatype;
typedef struct node
{
datatype data;
struct node next;
}linklist;
linklist head;
linklist hrear_creat()//建立链表
{
int x;
linklist head,p,rear;
head=(struct node)malloc(20);
head->data=-999;
rear=head;
//clear();
printf("请输入互不相同的正整数以0结束:\n\t");
scanf("%d",&x);
while(x!=0)
{
p=(struct node)malloc(20);
p->data=x;
rear->next=p;
rear=p;
scanf("%d",&x);
}
rear->next=NULL;
return(head);
}
linklist key_delete(linklist head)
{
void print(linklist rb);
linklist p,q;
int x,y,i;
printf("请输入要删除的起始结点:\n\t");
scanf("%d",&x);
printf("请输入要删除结点的个数:\n\t");
scanf("%d",&y);
p=head;
while( p && (p->data!=x) )
{
q = p;
p=p->next;
}
if(p!=NULL)
{
for(i=1;i<=y;i++)
{
p = q->next;
if ( p == NULL ) break;
q->next =p->next;
free(p);
}
return(head);
}
else
{
printf("\n\t要删除的结点不存在,请重新输入数据!\n",x);
return(NULL);
}
}
void print(linklist rb)
{
linklist p,head;
int n=0;
head=rb->next;
printf("链表中的数据为:\n\t%5d",head->data);
p=head->next;
while( p )
{
printf("%5d",p->data);
p=p->next;
n=n+1;
if((n+1)%10==0)
printf("\n\t");
}
printf("\n\t");
}
int main()
{
linklist p;
p=hrear_creat();
print(p);
key_delete(p);
print(p);
}
//没有编译,不知道有错没,当成伪代码来看吧
lp=headp->next;
lq=headq->next;
//如果q第一个数就比p大,需要插入到lp前面。以后不会有这种情况
if(lp->data>lq->data)
{
headp->next=lq;
headp->next->next=lp;
lp=lq;
lq=lq->next;
}
while(lp->next!=null&&lq!=null)
{
//如果两个数相等,不插入
if(lp->data==lq->data)
{
lp=lp->next;
lq=lq->next;
}
//如果需要插入
else if(lp->next->data>lq->data)
{
temp=lp->next;
lp->next=lq;
lp=lq;
lp->next=temp;
lq=lq->next;
}
else
//不需要插入
{
lp=lp->next;
}
}
//如果p中的最后一个数仍比q中的数小,将q中剩余的数都放在后面
if(lp->next==null)
{
lp->next=lq;
}
1、申请分配内存后,应该检查是否成功分配了;
2、你没有保存链表的头指针。在生成链表的过程中,头指针丢了。你应该有一个变量在程序运行过程中一直保存头指针,用其他变量执行生成和输出的 *** 作;
3、生成链表的过程中没有明确给新节点的NEXT赋NULL;
4、你的输出过程也有问题,一般应该是看其NEXT是否为NULL来判断结束的,未结束则应该指向其NEXT。你这里指针一直没变,而且还是个未赋值的指针;
5、输入的时候scanf应该是用变量地址。
//输入n等于5
//连续输入5个数据 20 12 25 10 30
//从大到小排序后是 30 25 20 12 10
#include <stdioh>
#include <stdlibh>
struct linkNode
{
int data;
struct linkNode next;
};
typedef struct linkNode Link;
Link CreateLink(int n) //创建链表
{
Link head;
Link newNode,pNow;
int value;
int i;
head=NULL;
for(i=0;i<n;i++)
{
scanf("%d",&value);
newNode=(Link)malloc(sizeof(struct linkNode));
if(newNode==NULL)
{
printf("\n分配动态内存时出错\n");
exit(1);
}
newNode->data = value;
newNode->next = NULL;
if(head==NULL)
{
head = newNode;
pNow = newNode;
}
else
{
pNow->next = newNode;
pNow = newNode;
}
}
return head;
}
void DispLink(Link p) //输出链表的所有节点
{
while(p)
{
printf("%d ",p->data);
p = p->next;
}
}
Link LinkSort(Link head) //选择排序法(从大到小)
{
Link p,other,maxNode;
int temp;
if(head == NULL) return head; //空链表
for(p = head; p->next != NULL; p = p->next)
{
maxNode=p;
for(other = p->next; other != NULL; other = other->next)
{
if(other->data > maxNode->data)
{
maxNode = other;
}
}
if(maxNode != p)
{
temp = p->data;
p->data = maxNode->data;
maxNode->data = temp;
}
}
return head;
}
int main()
{
Link head; //链表(不带头节点)
int n;
printf("输入链表的长度n: ");
scanf("%d",&n);
printf("连续输入%d个数据(以空格隔开): ",n);
head=CreateLink(n);
printf("\n原本链表的节点是: ");
DispLink(head);
LinkSort(head);
printf("\n从大到小排序之后: ");
DispLink(head);
printf("\n");
return 0;
}
以上就是关于在C程序如何动态链表全部的内容,包括:在C程序如何动态链表、C程序链表问题!!!!、c程序设计 链表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)