『壹』 c语言写一个链表

用连表实现栈的操作:我以前写的代码
typedef char datetype1;
typedef struct dateare1{
datetype1 elem;
struct dateare1 *forth;
}datestruct1;
typedef struct {
datestruct1 *base,*top;
int length;
}OPTR;
Lstack createOPTR(){
OPTR L;
datestruct1 *p;
p=(datestruct1 *)malloc(sizeof(datestruct1));
if(p)
{L.base=p;
L.top=p;
L.top->forth=NULL;
L.length=0;
return L;}
else {printf("\nINITSTACK ERROR");exit();}
}
void pushOPTR(OPTR *Lsp,datetype1 e) {datestruct1 *p;
p=(datestruct1 *)malloc(sizeof(datestruct1));
if(p)
{ (*Lsp).top->elem=e;
p->forth=(*Lsp).top;
(*Lsp).top=p;
(*Lsp).length++;}
else {printf("\nAPPLY MEMORY ERROR");exit();}
}
datetype1 popOPTR(OPTR *Lsp) {
datestruct1 *p;
p=(*Lsp).top;
if((*Lsp).length) {
(*Lsp).top=(*Lsp).top->forth;
free(p);
(*Lsp).length--;
return (*Lsp).top->elem;
}
else printf("STACCK EMPTY");
}
void clearOPTR(OPTR *Lsp){
while((*Lsp).length)
popLs(Lsp);
}
datetype1 getLs(OPTR *Lsp){
datestruct1 *p;
if((*Lsp).length) { p=(*Lsp).top->forth;
return p->elem; }
else printf("STACK EMPTY");
}

『贰』 C语言怎么建一个链表,书上的看不懂,求图解,详解。高分!!!

学习链表 基础知识 指针和结构体

先建立一个结构体,结构体包含一个数据域和一个指向结构体的指针
比如
typedef struct{
int data; //数据域

PCHAIN pNext; //指向下一个数据

}CHAIN,*PCHAIN;
接着把数据相接起来 比如
PCHAIN pHeader; //这是一个头 指向数据开头
CHAIN tChainData1,tChainData2; //第一个数据 第二个数据.....
pHeader=&tChainData1; //指向第一个数据
tChainData1.pNext=&tChainData2; //第一个数据 连接第二个数据 依次类推
这只是我随便写的简单链表,不过大意都是这样的

『叁』 用c语言中的链表和文件实现图中功能菜单

这么多功能一个财富值都没有

『肆』 C语言链表示意图,求高手相助

你若有编译工具,运行一下以下我补充完整的代码,结合我的注释,看看能否解决你的困惑
#include<stdio.h>
#include<stdlib.h>
#defineN8
typedefstructlist
{
intdata;
structlist*next;
}SLIST;
voidoutlist(SLIST*h);//声明输出函数,因它的定义在fun之后
voidfun(SLIST*h)
{
SLIST*p,*q;
p=h->next;

if(p!=NULL)
{
q=p->next;//p是当前数据结点,q是其后继相邻结点
while(q!=NULL)//q不是NULL才可以进行数据比较
{
if(p->data==q->data)//如果相邻的两个数据相同,则要删除相应的q结点
{
p->next=q->next;//为了保持链表的连续性,p->next要跳过要删除的q结点,因为,当前的p->next就是q
free(q);////释放q,删除掉这个相同的结点
q=p->next;//q指向其后继,因为后接下来的比较还是用qwhile(q!=NULL),if(p->data==q->data),q是程序的检查目标
}
else
{
p=q;//如果相邻两数不相同,则p变身为q
q=q->next;//q指向其后继,进行后续的比较
}
outlist(h);//加上这句,你可以看到删除的全过程
}
}
}
SLIST*creatlist(int*a)
{
SLIST*h,*p,*q;inti;
h=p=(SLIST*)malloc(sizeof(SLIST));
for(i=0;i<N;i++)
{
q=(SLIST*)malloc(sizeof(SLIST));
q->data=a[i];
p->next=q;
p=q;
}
p->next=0;
returnh;
}
voidoutlist(SLIST*h)
{
SLIST*p;
p=h->next;
if(p==NULL)printf(" ThelistisNULL! ");
else
{
printf(" Head");
do{printf("->%d",p->data);p=p->next;}while(p!=NULL);
printf("->End ");
}
}
voidmain()
{
SLIST*head;inta[N]={1,2,2,3,4,4,4,5};
head=creatlist(a);
printf(" Thelistbeforedeleting: ");outlist(head);
fun(head);
printf(" Thelistafterdeleting: ");outlist(head);
}

『伍』 C语言,关于链表建立能给个图解么

您好,# include<stdio.h>
# include<stdlib.h>

struct student //学生节点

{
char* Num; //学号

char* Name; //姓名

char* Score; //成绩

student* next;
};

void creatS(student*&stu) //创建学生信息

{
struct student*stu1=stu;
stu1=(struct student*)malloc(sizeof(struct student));
stu1->next=null;
char* data;
data=(char *)malloc(sizeof(char));

scanf("s%",data);

while(1)
{
struct student* temp=(struct student*)malloc(sizeof(struct student));
if(*data=="000") break;
temp->Num=data;

data=(char *)malloc(sizeof(char));
scanf("s%",data);
if(*data=="000") break;
temp->Name=data;
data=(char *)malloc(sizeof(char));
scanf("s%",data);
if(*data=="000") break;
temp->Score=data;
stu1->next=temp;
stu1=temp;

data=(char *)malloc(sizeof(char));
scanf("s%",data);
}
printf("学生信息录入完毕!\n")

return ;

}

void searchS(struct student* stu, char* sN) //根据学号查询信息

{
while(*(stu->Num)!=*sN)
stu=stu->next;
printf("该学生的信息是:%s%s",*(stu->Name);*(stu->Score));

}

int main()
{
struct student* stu;
creatS(stu);
char* number=(char *)malloc(sizeof(char));
printf(“输入学号查询学生信息!\n”);
scanf("s%",number);
searchS(stu,number);
return 0;

}

『陆』 C语言中,动态链表的流程图。拜托各位了 3Q

这样改应该就可以了: #include <stdio.h> #include <string.h> #include <stdlib.h> struct student { int age; char name[20]; struct student *next; }; typedef struct student STU_NODE; //原来是typesef STU_NODE *LIST; typedef STU_NODE *LIST; typedef short COUNT; int main(void) { LIST head =NULL,tmp=NULL,p=NULL; COUNT count=0; while(1) { tmp=(LIST)malloc(sizeof(STU_NODE)); if(tmp==NULL) { printf("mallco error\n"); return 1; } printf("enter your age:\n"); scanf("%d",&tmp->age); if(tmp->age==0) { p->next=NULL; break; } printf("enter your name:\n"); scanf("%s",tmp->name); count++; if(count==1) { head=tmp; p=tmp; } else { p->next=tmp; p=tmp; } } free(tmp); tmp=NULL; printf("output china:\n"); for(tmp=head;tmp!=NULL;tmp=tmp->next) { printf("age=%d\n",tmp->age); printf("name=%s\n",tmp->name); } //添加一个getchar(); getchar(); getchar(); return 0; }

『柒』 C语言数据结构具体链表学习,最好有图示

面向对象实现其实也算简单吧 你如果把类和对象理解了 就能很好的去运用面向对象思想了 我java和C#面向对象多学过 给你讲解一下吧 首先 类是一个比较抽象的概念 类是一个对象群体的概括 比如:人类就可以看成一个类 动物类也是一个类 植物类也是一个类 也就是说类是一组对象的抽象概念 而对象呢 就是一个类的特指 比如:人类是一个类 而人类里的张三 张三就是一个对象 这些能理解么? 我再给你说说类的组成吧 类由属性、方法、构造方法等组成 属性就用来描述一个类的共有特征的 比如人类都有名字、年龄、身高、体重等 这些在类里面都用属性去定义描述,而封装就是为了避免类的使用者在不知情的时候为属性乱赋值 所以把属性私有化,为每个属性提供公有的访问和赋值的方法,也就是get和set方法;再说说方法 方法是一个类的行为 当一个类需要去完成一件事情的时候 就为其定义方法 比如:人都有吃饭的行为 所以在可以定义一个吃法的方法 继承的概念我觉得用一句话就能说清楚:老鼠的儿子会打洞,老鼠一生下来就会打洞 这就是继承自父类的 至于构造方法 那是在一个类去构造生成一个对象时用到的 java中构造一个对象语法是这样的:类名 自定义对象么 =new 类名(); 当这样去new一个对象的时候就会去调用无参构造方法
就这些吧 这都是我个人的理解 希望对你有帮助 记得加分哦 嘻嘻

『捌』 C语言链表

#include "stdio.h"
#include "stdlib.h" //头文件
#define S struct Worker
#define LEN sizeof(S) //宏定义结构体名字 长度
struct Worker //结构体
{
int num;
char name[20];
float pay;
S *next; //指向下一元素的指针,关键
};
main ()
{
int i;
S *p,*q,*head; //p新的节点,q用于插入新的节点,head头节点
p=q=head=(S*)malloc(LEN); //分配空间,读入
scanf ("%d%s%f",&p->num,p->name,&p->pay); //依次输入结构的 num name pay
p=(S*)malloc(LEN); //动态分配空间,新的节点
scanf ("%d%s%f",&p->num,p->name,&p->pay); //依次输入结构的 num name pay
q->next=p; //确定下一个元素指针,再次读入
q=p; //指向新的节点
p=(S*)malloc(LEN); //动态分配空间,新的节点
scanf ("%d%s%f",&p->num,p->name,&p->pay); //依次输入结构的 num name pay
q->next=p; //插入新的节点
q=p; //指向新的节点
q->next=0; //最后的节点的next==0
p=head; //把头节点的地址给 p
while (p!=0) //如果不是最后一个节点
{
printf ("%d,%s,%0.1f\n",p->num,p->name,p->pay); //输出结构的变量
p=p->next; //指向下个节点
}
}

链表这个东西,就算全部给你解释,我想你也看不全懂啊,自己画个图,然后自己想想啊,看代码是没有很好的效果的啊,还有,第一次学链表的时候,那个结构不要那么多变量啊,一个num就好啊,容易理解啊.祝你成功.

『玖』 C语言单链表 我的画图理解 请大神帮忙看看是不是对的

intx;
structLNode*head,*rear;
head=rear=NULL;//初始化,很重要
scanf("%d",&x);//先读一个
while(x+1)
{
p=(structLNode*)malloc(sizeof(structLNode));
p->data=x;
if(rear==NULL)//第一次,给head赋值
head=p;
else
rear->next=p;//否则,追加到表尾
rear=p;//新结点成为新的表尾
scanf("%d",&x);
}
结合你的图,你的理解基本是正确的!细节问题,已在上面注释说明!

『拾』 c语言链表

图呢?
没图只能猜了
首先 B和D是完全相同的 只是表现方式不一样
而A至少有可能把q插入到链表末尾
C选项 q->next=p 则是把q的next指向了p 后头怎么操作就不用管了 反正不是指向NULL就是不对的 (除非是循环链表)
所以选C