當前位置:首頁 » 存儲配置 » c語言鏈式存儲結構

c語言鏈式存儲結構

發布時間: 2023-05-30 04:51:44

c語言 棧的鏈式存儲結構,為什麼不能出棧

你的函數stacknotempty有問題,返襲絕衫回的值拍腔與字面意思反了,宏哪一般棧操作習慣用stackEmpty來做判斷,你在stacknotempty中,堆棧為空卻返回了1。

㈡ C語言求救~~順式存儲和鏈式存儲結構區別

鏈式存儲結構的存讓返告儲空間在邏輯上是連續的,但是在物理上是離散的;而順序存儲結構的存儲空間在邏輯上是連續的,在物理上也是連續的。所以鏈式存儲結構可以將一些零碎的小空間鏈接起來組成邏輯上連續的空間,因此空間利用率較高;而順序存儲結世純構是佔用磁碟上一片連續的物理空間坦明,小於存儲要求的那些空間不能被使用,因此會跳過那些小存儲空間,然後尋找滿足要求的連續存儲空間,於是空間利用率就變低了。 但是存儲相同內容,順序存儲結構比鏈式存儲結構節省存儲空間。

㈢ 鏈式存儲隊列的數據結構(邏輯結構+存儲結構)分析、鏈式存儲隊列的基本C語言結構體分析與定義

鏈式隊列

鏈式存儲結構的隊列稱作鏈式隊列。

鏈式隊列的隊頭指針指在隊列的當前隊頭結點位置,隊尾指針指在隊列的當前隊尾結點位置。不帶頭結點的鏈式隊列時可直接刪除隊頭指針所指的結點。

鏈式隊列中結點的結構體可定義如下:

typedef struct qnode

{

DataType datal;

Struct qnode *next;

}LQNode;

為了方便參數調用,通常把鏈式隊列的隊頭指針front和隊尾指針rear也定義為如下的結構體類型LQueue:

typedef struct

{

LQNode *front;

LQNode *rear;

}LQueue;

鏈式隊列操作的實現

(1) 初始化QueueInitiate(LQueue *Q)

void QueueInitiate(LQueue *Q)

{

Q->rear=NULL;

Q->front=NULL;

}

(2)非空否QueueNotEmpty(LQueue Q)

int QueueNotEmpty(LQueue Q)

/*判斷鏈式隊列Q非空否,非空返回1,否則返回0*/

{

if(Q.front==NULL)return 0;

else return 1;

}

(3)入隊列QueueAppend(LQueue *Q,DataType x)

int QueueAppend(LQueue *Q,DataType x)

/*把數據元素x插入鏈式隊列Q隊列的隊尾,入隊列成功返回1,否則返回0*/

{

LQNode *p;

if((p=(LQNode*)malloc(sizeof(LQNode)))==NULL)

{

printf(「內存不足無法插入!\n);

return 0;

}

p->data=x;

p->next=NULL;

if(Q->rear!=NULL)Q->rear->next=p;

Q->rear=p;

if(Q->front==NULL)Q->front=p;

return 1;

}

(4)出隊列QueueDelete(LQueue *Q,DataType *d)

int QueueDelete(LQueue *Q,DataType *d)

/*刪除鏈式隊列Q的隊頭數據元素值到d,出隊列成功返回1,否則返回0*/

{

LQNode *p;

if(Q->front==NULL)

{

printf(「隊列已空無數據元素出隊列!\n」);

return 0;

}

else

{

*d=Q->front->data;

p=Q->front;

Q->front=Q->front->next;

if(Q->front==NULL)Q->rear=NULL;

free(p);

return 1;

}

}

(5)取隊頭數據元素QueueGet(LQueue *Q,DataType *d)

int QueueGet(LQueue *Q,DataType *d)

/*取鏈式隊列Q的當前隊頭數據元素值到d,成功返回1,否則返回0*/

{

if(Q.front==NULL)

{

printf(「隊列已空無數據元素出隊列!\n);

return 0;

}

else

{

*d=Q.front->data;

return 1;

}

}

(6)撤銷動態申請空間Destory(LQueue *head)

int Destory(LQueue *head)

{

LQNode *p,*p1;

p=Q.front;

while(p!=NULL)

{

p1=p;

p=p->next;

free(p1);

}

}
幫你轉的,我覺得他描述的很清楚。希望對你有幫助。

㈣ 分別寫出線性表的鏈式存儲結構、二叉樹的二叉鏈表存儲機構的類C語言描述

線性表的鏈式存儲結構:
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
(被封裝好的每個節點,都有一個數據域data和一個指針域*next用於指向下一個節點)
二叉樹的二叉鏈表:
typedef int TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
(被封裝好的每個節點,都有一個數據域data和兩個指針域 *lchild,*rchild分別指向左右子樹)

需要什麼類型的數據作為數據域可更改,或者typedef int ElemType;和typedef int TElemType;中的int,比如改為char、float等或者自定義數據類型。

㈤ c語言線性表鏈式結構中如何存儲數據

對於LinkList L: L是指向定義的node結構體的指針,可以用->運算符來訪問結構體成員,即L->elem,而(*L)就是個Node型的結構體了,可以用點運算符訪問該結構體成員,即(*L).elem;

對於LinkList *L:L是指向定義的Node結構體指針的指針,所以(*L)是指向Node結構體的指針,可以用->運算符來訪問結構體成員,即(*L)->elem,當然,(**L)就是Node型結構體了,所以可以用點運算符來訪問結構體成員,即(**L).elem;

在鏈表操作中,我們常常要用鏈表變數作物函數的參數,這時,用LinkList L還是LinkList *L就很值得考慮深究了,一個用不好,函數就會出現邏輯錯誤,其准則是:
如果函數會改變指針L的值,而你希望函數結束調用後保存L的值,那你就要用LinkList *L,這樣,向函數傳遞的就是指針的地址,結束調用後,自然就可以去改變指針的值;
而如果函數只會修改指針所指向的內容,而不會更改指針的值,那麼用LinkList L就行了

㈥ C語言基礎知識中:線性表的順序、鏈式存儲結構分別是:隨機存取和順序存取結構對嗎

不對,數組是隨機存取,所有的線性表都是順序存取結構。你想想,我要找第5個元素,用數組直接 A[4] 就找到了,而線性表就要從「頭」元素開始一個一個地往後遍歷,直到需要的那個,隨機不了。

㈦ 如何用C語言實現簡單的鏈式存儲結構

使用結構體:
typedef struct node{
int data;
struct node* next;
}Node;
就可以實現,以上是一個單鏈表的節點元素亂啟,李清每個節點的next指向下一個節點,就可以實現鏈式存儲了。遇到其他類似的問題,可以根據需要設置相應哪陪前的指針域。

㈧ 用C語言編寫鏈式存儲結構下實現線性表的創建,插入,刪除,按值查找

#include <stdio.h>
#include <stdlib.h>

typedef struct LNode{
int data; //鏈表數據
struct LNode* next; //鏈表指針
}LNode,*LinkList;

/*頭插法-建立單鏈表*/
LinkList HeadCreate(LinkList la)
{
int num;
la=(LinkList)malloc(sizeof(LNode)); //建立頭結點
la->next=NULL;
scanf("%d",&num);
while(num!=10)
{
LNode *p=(LinkList)malloc(sizeof(LNode));
p->data=num;
p->next=la->next;
la->next=p;
scanf("%d",&num);
}
return la;
}

/*尾插法-建立單鏈表*/
LinkList TailCreate(LinkList la)
{
int num;
la=(LinkList)malloc(sizeof(LNode));
la->next=NULL;
LinkList s,r=la;
scanf("%d",&num);
while(num!=10)
{
s=(LinkList)malloc(sizeof(LNode));
s->data=num;
r->next=s;
r=s;
scanf("%d",num);
}
r->next=NULL;
return la;
}

/*單鏈表遍歷*/
void TravelList(LinkList la)
{
LinkList p=la->next;
while(p!=NULL)
{
printf("%d->",p->data);
p=p->next;
}
printf("\n");
}

/*單鏈表的按位查找*/
LinkList GetElem(LinkList la,int i)
{
int j=1;
LNode* p=la->next;
if(i<1)
return NULL;
while(p && j<i)
{
p=p->next;
j++;
}
return p;
}

/*單鏈表的按值查找*/
LinkList LocalElem(LinkList la,int e)
{
LNode* p=la->next;
while(p!=NULL && p->data!=e)
p=p->next;
return p;
}

/*單鏈表插入操作*/
bool InsertList(LinkList la,int i,int e)
{
//在la鏈表中的i位置插入數值e
int j=1;
LinkList p=la,s;
while(p && j<i)
{
p=p->next;
j++;
}
if(p==NULL)
return false;
if((s=(LinkList)malloc(sizeof(LNode)))==NULL)
return false;
s->data=e;
s->next=p->next;
p->next=s;
return true;
}

/*單鏈表刪除操作*/
bool DeleteList(LinkList la,int i)
{
int j=1;
LinkList p=la,q;
while(p && j<i) //p指向第i-1個元素
{
p=p->next;
j++;
}
if(p==NULL || p->next==NULL) //表示不存在第i-1個和第i的元素
return false;
q=p->next;
p->next=q->next;
free(q);
return true;
}

/*單鏈表的表長*/
int LengthList(LinkList la)
{
int nLen=0;
LinkList p=la->next;
while(p)
{
p=p->next;
nLen++;
}
return nLen;
}

/*單鏈表逆置*/
LinkList Reserve(LinkList la)
{
if(la==NULL || la->next==NULL)
return la;
LinkList p=la->next,q=p->next,r=q->next;
la->next=NULL;
p->next=NULL;
while(r!=NULL)
{
q->next=p;
p=q;
q=r;
r=r->next;
}
q->next=p;
la->next=q;
return la;
}

int main()
{
LNode la;
LinkList p;
p=HeadCreate(&la); //頭插法創建單鏈表
TravelList(p);
printf("%p\n",GetElem(p,1)); //獲得第1個結點地址
InsertList(p,2,10); //在鏈表的第2個位置插入元素10
TravelList(p);
DeleteList(p,3); //刪除鏈表的第3個元素
TravelList(p);
printf("%d\n",LengthList(p)); //獲得鏈表長度
p=Reserve(p);
TravelList(p);
return 0;
}

//運行結果
//5 6 12 7 8 14 9 3 2 5 14 10 頭插法創建鏈表
//14->5->2->3->9->14->8->7->12->6->5-> 顯示鏈表
//00382490 第一個結點的地址
//14->10->5->2->3->9->14->8->7->12->6->5-> 插入元素值為10的結點
//14->10->2->3->9->14->8->7->12->6->5-> 刪除第三個結點
//11 獲得鏈表長度
//5->6->12->7->8->14->9->3->2->10->14-> 鏈表逆置
//Press any key to continue

這是我寫的一個線性表鏈式存儲的綜合程序,包含了你所要的創建、刪除、插入、按值查找的功能,還有一些額外的功能。下面加註釋的是程序運行結果,你可以參考試著改改程序,讓程序更加完美。希望對你有幫助,呵呵!

㈨ c語言問題,什麼是無序線性表什麼是鏈式存儲結構

這是數據結構問題,無序線性表顧名思義就是裡面的元素是無序的一張線性表,就像數組,就是一種線性表,至於線性表的具體知識,建議自己去看一下數據結構,這樣更明白。
鏈式存儲結構跟線性存儲結構相對應。線性存儲結構是在連續的空間中存儲,可以實現順序的查找,鏈式存儲則可以實現在不連續的空間訪問存儲,使用指針就能實現了。
這兩個概念不是C語言問題,這是數據結構的知識,這是很重要的,建議你認真的學習下數據結構就明白了,這兩個概念是最基礎的概念!

㈩ 求用鏈式存儲結構寫的學生信息管理系統,c語言

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student
{
int id;
int csn;
int csy;
char name[10];
} STU;
typedef struct node
{
STU date;
struct node *next;
}NODE;

void chushihualink(NODE *H)
{
H->next=NULL;
}

void xinzenglink(NODE *H,NODE *newstu)
{
while(H->next)
H=H->next;
H->next=newstu;
newstu->next=NULL;
}

void charulink(NODE *H,NODE *newstu,int pos)
{
int i;
for(i=0;i<pos;i++)
H=H->next;
newstu->next=H->next;
H->next=newstu;
}
void shuchulink(NODE *H)
{
while(H->next)
{
printf("姓名%s,學號%d,出生年月%d,%d\鄭啟穗n",H->next->date.name,H->next->date.id,H->next->date.csn,H->next->date.csy);
H=H->next;
}
}
void xiugailink(NODE *H,NODE *oldstu,NODE *newstu)
{
while(H->next)
{
if(H->next->date.id==oldstu->date.id)
{
oldstu->date=newstu->date;
newstu->next=oldstu->next;
break;
}
H=H->next;
}
}
void shanchulink(NODE *H,NODE *oldstu)
{
while(H->next)
{
if(H->next->date.id==oldstu->date.id)
{
H->next=H->旁慶next->next;
break;
}
H=H->next;
}
}
NODE paixulink(NODE *H)
{
NODE *p,*q;
STU temp;
for(p=H;p->next!=NULL;p=p->next)
{
for(q=p->next;q->next!=NULL;q=q->next)
{
if(p->next->date.id>q->next->date.id)
{
temp=p->next->date;
p->next->date=q->next->date;
q->next->date=temp;
}
}
}
return *H;
}
int main() {
NODE *H;
NODE newstu1;
NODE newstu2;
NODE newstu3;
NODE newstu4;
NODE newstu5;
H=(NODE *)malloc(sizeof(NODE));
newstu1.date.id=101;
newstu1.date.csn=1997;
newstu1.date.csy=10;
newstu1.next=NULL;
strcpy(newstu1.date.name,"zhangsan");
newstu2.date.id=102;
newstu2.date.csn=1995;
newstu2.date.csy=12;
newstu2.next=NULL;
strcpy(newstu2.date.name,"lisi");
newstu3.date.id=103;
newstu3.date.csn=1999;
newstu3.date.csy=5;
newstu3.next=NULL;
strcpy(newstu3.date.name,"wangwu");
newstu4.date.id=104;
newstu4.date.csn=1994;
newstu4.date.csy=4;
newstu4.next=NULL;
strcpy(newstu4.date.name,"zhaoliu");
newstu5.date.id=105;
newstu5.date.csn=1991;
newstu5.date.csy=5;
newstu5.next=NULL;
strcpy(newstu5.date.name,"喊卜tianqi");
chushihualink(H);
xinzenglink(H,&newstu1);
xinzenglink(H,&newstu2);
xinzenglink(H,&newstu3);
charulink(H,&newstu4,2);
xiugailink(H,&newstu2,&newstu5);
paixulink(H);
shanchulink(H,&newstu5);
shuchulink(H);

}

熱點內容
區域網存儲安裝 發布:2025-02-06 23:42:50 瀏覽:926
androidbug 發布:2025-02-06 23:31:56 瀏覽:50
php數字判斷 發布:2025-02-06 23:17:40 瀏覽:40
優路教育伺服器連接不上怎麼回事 發布:2025-02-06 23:03:49 瀏覽:141
資料庫加速 發布:2025-02-06 23:02:14 瀏覽:565
蘋果ipodpro如何連接安卓手機 發布:2025-02-06 23:00:56 瀏覽:529
android格式化sd卡 發布:2025-02-06 23:00:50 瀏覽:982
郝斌資料庫 發布:2025-02-06 22:44:57 瀏覽:182
全息存儲器 發布:2025-02-06 22:43:51 瀏覽:117
游戲源碼如何使用 發布:2025-02-06 22:43:40 瀏覽:716