當前位置:首頁 » 編程語言 » c語言建立鏈表

c語言建立鏈表

發布時間: 2023-08-19 11:24:38

1. c語言,創建一個鏈表並賦值1、2、3、4、5,麻煩把全部程序寫下

// DLink.cpp : 定義控制台應用程序的入口點。

//

#include "stdafx.h"

#include "malloc.h"

typedef struct LNode

{

int data;

struct LNode *next;

}Dlink;

int _tmain(int argc, _TCHAR* argv[])

{

Dlink *l,*s1;

Dlink *s=(Dlink *)malloc(sizeof(Dlink));

l=s;

for(int i=0;i<5;i++)

{

s->data=i+1;

s1=(Dlink *)malloc(sizeof(Dlink));

s->next=s1;

s=s1;

}

s->next=NULL;

//數據就保存到以l為頭結點的鏈表中了

return 0;

}

(1)c語言建立鏈表擴展閱讀:

對於非線性的鏈表,可以參見相關的其他數據結構碧宴,例如樹、圖。另外有一種基於多個線性鏈表的數據結構:跳錶,插入、刪除和查找等基本操作的速度可以達到O(nlogn),和伏改平衡二叉樹一樣。

其中存儲數據元素信息的域稱作數悔廳銀據域(設域名為data),存儲直接後繼存儲位置的域稱為指針域(設域名為next)。指針域中存儲的信息又稱做指針或鏈。

由分別表示,,?,的N 個結點依次相鏈構成的鏈表,稱為線性表的鏈式存儲表示,由於此類鏈表的每個結點中只包含一個指針域,故又稱單鏈表或線性鏈表。

2. 用c語言建立一個有序鏈表

先按正常流程建立一個鏈表,再按照其某一個成員值進行冒泡排序(排序過程的交換,只交換鏈表指針以外的成員值)。

演示代碼如下:(演示代碼鏈表20個節點,成員值為隨機值)

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

typedef struct slist

{

int a;

struct slist *next;

}SLIST;

SLIST *init();//生成20個節點成員為隨機數的鏈表

void showList(SLIST *slHead);//列印鏈表

void px(SLIST *slHead,int flag);//float=1:降序。=2升序

int main()

{

SLIST *slHead=NULL;

slHead=init();

printf("排序前: ");

showList(slHead);

printf(" 降序排序後: ");

px(slHead,1);

showList(slHead);

printf(" 升序排序後: ");

px(slHead,2);

showList(slHead);

return 0;

}

void px(SLIST *slHead,int flag)//flag=1:降序。=2升序

{

SLIST *sl0=slHead->next,*sl1=NULL,slSave,*pSave=NULL;

while(sl0)

{

sl1=sl0->next;

while(sl1)

{

if((flag==1 && sl0->a<sl1->a)||(flag==2 && sl0->a>sl1->a))

{

slSave=*sl0;

*sl0=*sl1;

sl0->next=slSave.next;

pSave=sl1->next;

*sl1=slSave;

sl1->next=pSave;

}

sl1=sl1->next;

}

sl0=sl0->next;

}

}

void showList(SLIST *slHead)

{

int i=0;

while(slHead->next)

{

printf("節點%d成員值:%d ",++i,slHead->next->a);

slHead=slHead->next;

}

printf(" ");

}

SLIST *init()

{

int num,cnt=20;

static SLIST head;

SLIST *slHead=&head,*slTail=NULL,*slNew=NULL;

slHead->next=NULL;

srand(time(NULL));

while(cnt--)

{

num=rand()%100;

slNew=(SLIST *)malloc(sizeof(SLIST));

if(!slNew)return NULL;

slNew->a=num;

slNew->next=NULL;

if(!slHead->next)

slHead->next=slNew;

else

slTail->next=slNew;

slTail=slNew;

}

return slHead;

}

3. 怎樣創建一個線性鏈表(C語言)

/*線性鏈表的構建*/
#include<stdio.h>
#include<stdlib.h>

typedefstructLnode
{
intdata;
structLnode*next;
}Lnode;

intmain()
{
Lnode*H,*p1,*p2,*p3,*p4;
H=(Lnode*)malloc(sizeof(Lnode));
p1=(Lnode*)malloc(sizeof(Lnode));
p2=(Lnode*)malloc(sizeof(Lnode));
p3=(Lnode*)malloc(sizeof(Lnode));
p4=(Lnode*)malloc(sizeof(Lnode));

p1->data=132;
p1->next=p2;
p2->data=942;
p2->next=p3;
p3->data=158;
p3->next=182;
p4->data=231;
p4->next=NULL;

printf("%d,%d ",p1->data,p3->data);
printf("%d",p1->next->data);

return0;
}

4. c語言!!!程序設計:建立一個學生信息鏈表,包括學號,姓名,成績.(實現添加,刪除,查詢,排序,平均)

代碼如下:

/*用c語言鏈表編寫一個學生信息系統程序,要求輸出學生的學號,姓名,性別,學號,姓名,成績(實現添加,刪除,查詢,排序,平均)*/

#include <stdio.h>

#include <iostream>

#include <string.h>

#include <stdlib.h>

using namespace std;

const int n=5;

/*

* nodeEntry : 節點數據類型

* nodeADT : 節點結構

* linkADT : 鏈表結構

*/

typedef struct Student

{

int num;

char name[30];

char sex;

float score1;//語文

float score2;//數學

float score3;//英語

//struct Student *next;

}Student;

typedef struct linkCDT {

nodeADT head;

}*linkADT;

/*

* InitLink : 初始化鏈表

* CreateNode : 創建節點

* AppendLink : 添加數據

*/

nodeADT CreateNode(Student entry) {

nodeADT p=(nodeADT)malloc(sizeof*p);

p->entry=entry,p->next=0;

return p;

}

/*

SortLink : 排序鏈表

//按學號排序

void SortLinkID(linkADT link) {

nodeADT pHead,pRear,p,tp;

if (!link) return;

for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {

for (tp=pHead,p=pHead->next;p;tp=p,p=p->next)

if (pHead->entry.num>=p->entry.num)

tp->next=p->next,p->next=pHead,pHead=p,p=tp;

if (!pRear) link->head=pHead;

else pRear->next=pHead;

pRear=pHead;

}

//按英語成績排序

void SortLinkEnglish(linkADT link) {

nodeADT pHead,pRear,p,tp;

if (!link) return;

for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {

for (tp=pHead,p=pHead->next;p;tp=p,p=p->next)

if (pHead->entry.score3>=p->entry.score3)

tp->next=p->next,p->next=pHead,pHead=p,p=tp;

if (!pRear) link->head=pHead;

else pRear->next=pHead;

pRear=pHead;

}

}

//按姓名的字典序進行排序

void SortLinkName(linkADT link) {

nodeADT pHead,pRear,p,tp;

if (!link) return;

for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {

for (tp=pHead,p=pHead->next;p;tp=p,p=p->next)

if (pHead->entry.name[0]>=p->entry.name[0])

tp->next=p->next,p->next=pHead,pHead=p,p=tp;

if (!pRear) link->head=pHead;

else pRear->next=pHead;

pRear=pHead;

}

}

//按姓名的長度進行排序

void SortLinkNameLength(linkADT link) {

nodeADT pHead,pRear,p,tp;

if (!link) return;

for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {

for (tp=pHead,p=pHead->next;p;tp=p,p=p->next)

if (strlen(pHead->entry.name)>=strlen(p->entry.name))

tp->next=p->next,p->next=pHead,pHead=p,p=tp;

if (!pRear) link->head=pHead;

else pRear->next=pHead;

pRear=pHead;

}

循環鏈表是與單鏈表一樣

是一種鏈式的存儲結構,所不同的是,循環鏈表的最後一個結點的指針是指向該循環鏈表的第一個結點或者表頭結點,從而構成一個環形的鏈。

循環鏈表的運算與單鏈表的運算基本一致。所不同的有以下幾點:

1、在建立一個循環鏈表時,必須使其最後一個結點的指針指向表頭結點,而不是象單鏈表那樣置為NULL。此種情況還使用於在最後一個結點後插入一個新的結點。

2、在判斷是否到表尾時,是判斷該結點鏈域的值是否是表頭結點,當鏈域值等於表頭指針時,說明已到表尾。而非象單鏈表那樣判斷鏈域值是否為NULL。

以上內容參考:網路-鏈表

5. c語言用函數創建單鏈表

#include<stdio.h>
#include<stdlib.h>
//鏈表定義
typedef int ElemType;
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
/*************************************
* 鏈表函數 *
*************************************/
//鏈表初清運始化
void InitLink(LinkList &L);
//創建函數,尾插法
void CreateLink_T(LinkList &L,int n);
//創建函數,頭插法
void CreateLink_H(LinkList &L,int n);
//銷毀函數
void DestroyLink(LinkList &L);
//判斷是否為空函數
bool EmptyLink(LinkList &L);
//獲取函數
bool GetLink(LinkList &L,int i,int & e);
//答槐梁插入函數
void InsertLink(LinkList &L,int i,int e);
//刪除函數
void DeleteLink(LinkList &L,int i,int &e);
//遍歷函數
void TraverseLink(LinkList &L);
//鏈表長度函數
int LengthLink(LinkList &L);
//合並函數
void MergeLink(LinkList &L1,LinkList L2);
void main()
{
LinkList L1,L2;
InitLink(L1);
InitLink(L2);
CreateLink_H(L1,2);
CreateLink_T(L2,2);

TraverseLink(L1);
printf("\明帆n");
TraverseLink(L2);
printf("\n");

MergeLink(L1,L2);

TraverseLink(L1);
TraverseLink(L2);

}
//創建函數,尾插法
void InitLink(LinkList &L)
{
L=(LinkList)malloc(sizeof(LNode));
if (!L)
{
printf("Init error\n");
return;
}
L->next=NULL;
}
void CreateLink_T(LinkList &L,int n)
{
if(n<1)
{
printf("n must >=1\n");
return ;
}
else
{
// L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(int i=0;i<n;i++)
{
LinkList p=(LinkList)malloc(sizeof(LNode));// the lower letter p
printf("enter the data :\t");
scanf("%d",&(p->data));
p->next=L->next;
L->next=p;
}
}
}

//創建函數,頭插法
void CreateLink_H(LinkList &L,int n)
{
if (n<1)
{
printf("n must >=1\n ");
return;
}
else
{
//L=(LinkList)malloc(sizeof(LNode));
LinkList pre=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
pre=L;
for(int i=0;i<n;i++)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
printf("enter the data:\t");
scanf("%d",&(p->data));
pre->next=p;
pre=p;
}
pre->next=NULL;
}
}

//銷毀函數
void DestroyLink(LinkList &L)
{
LinkList q=L,p=L;
while (p)
{
q=p;
p=p->next;
free(q);
}
L->next=NULL;

}

//判斷是否為空函數
bool EmptyLink(LinkList &L)
{
if (NULL==L->next)
{
return true;
}
else
{
return false;
}
}

//獲取函數
bool GetLink(LinkList &L,int i,int& e)
{
if (i<1)
{
return false;
}
else
{
if (EmptyLink(L))
{
return false;
}
LinkList p=L->next;
int j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if (!p||j>i)
{
return false;
}
else
{
e=p->data;
return true;
}

}
}

//插入函數
void InsertLink(LinkList &L,int i,int e)
{
if (i<0||i>LengthLink(L))
{
printf("Insert error\n");
return;
}
else
{
LinkList p=L;
int j=0;
while(p&&(j<i))
{
p=p->next;
j++;
}
if (!p||j>i)
{
printf("Insert error\n");
return;
}
else
{
LinkList q=(LinkList)malloc(sizeof(LNode));
q->data=e;
q->next=p->next;
p->next=q;

}
}

}

//刪除函數
void DeleteLink(LinkList &L,int i,int &e)
{
if(i<=0||i>LengthLink(L))
{
printf("delete error\n");
return;
}
else
{
LinkList p=L;
int j=0;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i)
{
printf("please enter i again\n");
return;
}
else
{
LinkList q=p->next;
e=p->next->data;
p->next=p->next->next;
free(q);

}
}
}

//遍歷函數
void TraverseLink(LinkList &L)
{
LinkList p=L->next;
if(!p)
{
printf("the Link L is empty\n");
}
while(p)
{
printf("%d\n",p->data);
p=p->next;
}
}
//鏈表長度函數
int LengthLink(LinkList &L)
{
int i=0;
LinkList p=L->next;
while(p)
{
p=p->next;
i++;
}
return i;
}

//合並函數
void MergeLink(LinkList &L1,LinkList L2)
{
int i=0,flag=0;
LinkList p1=L1->next,p2=L2->next;
LinkList p=(LinkList)malloc ((LengthLink(L1)+LengthLink(L2)+2)*sizeof(LNode));

LinkList pre=p;
if (!p)
{
printf("MergeLink error\n");
return;
}
p->next=NULL;
while (p1&&p2)
{
if (p1->data>=p2->data)
{
InsertLink(p,i++,p2->data);
p2=p2->next;
}
else
{
InsertLink(p,i++,p1->data);
p1=p1->next;
}
}
while (p1)
{
InsertLink(p,i++,p1->data);
p1=p1->next;
}
while(p2)

{
InsertLink(p,i++,p2->data);
p2=p2->next;
}
while(pre)
{
pre=pre->next;
}

LinkList q=L1;
L1=p;
DestroyLink(q);
DestroyLink(L2);

}

熱點內容
手機配置內存顏色怎麼看 發布:2025-02-05 12:47:36 瀏覽:198
電腦伺服器盤口順序 發布:2025-02-05 12:40:20 瀏覽:663
mcpe伺服器怎麼開 發布:2025-02-05 12:40:13 瀏覽:835
linux文件記錄 發布:2025-02-05 12:39:31 瀏覽:775
編程獎金計算 發布:2025-02-05 12:27:01 瀏覽:185
軟體怎麼去掉付費配置 發布:2025-02-05 12:26:17 瀏覽:504
安卓手機怎麼下載谷歌商店apk 發布:2025-02-05 12:21:09 瀏覽:367
騰訊視頻的緩存在哪裡 發布:2025-02-05 12:21:03 瀏覽:710
安卓聊天記錄未備份怎麼恢復 發布:2025-02-05 12:05:02 瀏覽:953
海外搭建伺服器可以連外網嗎 發布:2025-02-05 11:49:21 瀏覽:64