『壹』 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