主函數(shù)這里

創(chuàng)新互聯(lián)主營(yíng)漢臺(tái)網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,手機(jī)APP定制開發(fā),漢臺(tái)h5小程序開發(fā)搭建,漢臺(tái)網(wǎng)站營(yíng)銷推廣歡迎漢臺(tái)等地區(qū)企業(yè)咨詢
Linklist?List;
printf("輸入創(chuàng)建鏈表的長(zhǎng)度:");
scanf("%d",num);
CreateList_H(List,num); //創(chuàng)建鏈表
改為?
LNode?List;
printf("輸入創(chuàng)建鏈表的長(zhǎng)度:");
scanf("%d",num);
CreateList_H(List,num); //創(chuàng)建鏈表
函數(shù)內(nèi)在堆上分配好內(nèi)存,但是 沒(méi)有傳遞到棧上
另外?你的變量名很迷人
#includestdio.h
#includestdlib.h
//鏈表定義
typedef int ElemType;
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
/*************************************
* 鏈表函數(shù) *
*************************************/
//鏈表初始化
void InitLink(LinkList L);
//創(chuàng)建函數(shù),尾插法
void CreateLink_T(LinkList L,int n);
//創(chuàng)建函數(shù),頭插法
void CreateLink_H(LinkList L,int n);
//銷毀函數(shù)
void DestroyLink(LinkList L);
//判斷是否為空函數(shù)
bool EmptyLink(LinkList L);
//獲取函數(shù)
bool GetLink(LinkList L,int i,int e);
//插入函數(shù)
void InsertLink(LinkList L,int i,int e);
//刪除函數(shù)
void DeleteLink(LinkList L,int i,int e);
//遍歷函數(shù)
void TraverseLink(LinkList L);
//鏈表長(zhǎng)度函數(shù)
int LengthLink(LinkList L);
//合并函數(shù)
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);
}
//創(chuàng)建函數(shù),尾插法
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(n1)
{
printf("n must =1\n");
return ;
}
else
{
// L=(LinkList)malloc(sizeof(LNode));
L-next=NULL;
for(int i=0;in;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;
}
}
}
//創(chuàng)建函數(shù),頭插法
void CreateLink_H(LinkList L,int n)
{
if (n1)
{
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;in;i++)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
printf("enter the data:\t");
scanf("%d",(p-data));
pre-next=p;
pre=p;
}
pre-next=NULL;
}
}
//銷毀函數(shù)
void DestroyLink(LinkList L)
{
LinkList q=L,p=L;
while (p)
{
q=p;
p=p-next;
free(q);
}
L-next=NULL;
}
//判斷是否為空函數(shù)
bool EmptyLink(LinkList L)
{
if (NULL==L-next)
{
return true;
}
else
{
return false;
}
}
//獲取函數(shù)
bool GetLink(LinkList L,int i,int e)
{
if (i1)
{
return false;
}
else
{
if (EmptyLink(L))
{
return false;
}
LinkList p=L-next;
int j=1;
while(pji)
{
p=p-next;
j++;
}
if (!p||ji)
{
return false;
}
else
{
e=p-data;
return true;
}
}
}
//插入函數(shù)
void InsertLink(LinkList L,int i,int e)
{
if (i0||iLengthLink(L))
{
printf("Insert error\n");
return;
}
else
{
LinkList p=L;
int j=0;
while(p(ji))
{
p=p-next;
j++;
}
if (!p||ji)
{
printf("Insert error\n");
return;
}
else
{
LinkList q=(LinkList)malloc(sizeof(LNode));
q-data=e;
q-next=p-next;
p-next=q;
}
}
}
//刪除函數(shù)
void DeleteLink(LinkList L,int i,int e)
{
if(i=0||iLengthLink(L))
{
printf("delete error\n");
return;
}
else
{
LinkList p=L;
int j=0;
while(pji-1)
{
p=p-next;
j++;
}
if(!p||ji)
{
printf("please enter i again\n");
return;
}
else
{
LinkList q=p-next;
e=p-next-data;
p-next=p-next-next;
free(q);
}
}
}
//遍歷函數(shù)
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;
}
}
//鏈表長(zhǎng)度函數(shù)
int LengthLink(LinkList L)
{
int i=0;
LinkList p=L-next;
while(p)
{
p=p-next;
i++;
}
return i;
}
//合并函數(shù)
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 (p1p2)
{
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);
}
#include stdio.h
#include malloc.h#define N 5
typedef struct LNode
{
double data;
long number;
struct LNode *next;
}LNode,*LinkList;LinkList fun(LinkList L,double *aver)
{
LinkList p,q,h;
double sum=0;
p=L-next;
while(p!=NULL)
{
sum+=p-data;
p=p-next;
}
sum=sum/N;
*aver = sum;
printf("aver=%.2f\n",*aver);
p=L-next;
h=(LinkList)malloc(sizeof(LNode));
h-next = NULL;
while(p!=NULL)
{
if(p-data=sum)
{
q=(LinkList)malloc(sizeof(LNode));
q-number = p-number;
q-data=p-data;
q-next = h-next;
h-next = q;
}
p=p-next;
}
return h;
}
void main()
{
LinkList L,p,h;
int i;
double aver;
L= (LinkList)malloc(sizeof(LNode));
L-next = NULL;
printf("創(chuàng)建鏈表...\n輸入學(xué)生的學(xué)號(hào)和成績(jī):\n");
for( i=0;iN;i++)//逆位序輸入N個(gè)元素的值,建立帶頭結(jié)點(diǎn)的單鏈表L
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d %lf",p-number,p-data);
p-next=L-next;
L-next=p;
}
h=fun(L,aver);
printf("平均成績(jī)?yōu)椋?.2f\n",aver);
p=h-next;
printf("大于或等于平均成績(jī)的學(xué)生信息...\n");
printf("學(xué)號(hào) 成績(jī)\n");
while(p!=NULL)
{
printf("%-12d %-3.2f\n",p-number,p-data);
p=p-next;
}
printf("\n");
}
#includeiostream
using?namespace?std;
class?Node?{
public:
int?data;
Node*?next;
Node(int?_data)?{
data?=?_data;
next?=?NULL;
}
};
class?LinkList?{
private:
Node*?head;
public:
LinkList()?{
head?=?NULL;
}
void?insert(Node?*node,?int?index)?{
if?(head?==?NULL)?{
head?=?node;
return;
}
if?(index?==?0)?{
node-next?=?head;
head?=?node;
return;
}
Node?*current_node?=?head;
int?count?=?0;
while?(current_node-next?!=?NULL??count??index?-?1)?{
current_node?=?current_node-next;
count++;
}
if?(count?==?index?-?1)?{
node-next?=?current_node-next;
current_node-next?=?node;
}
}
void?output()?{
if?(head?==?NULL)?{
return;
}
Node?*current_node?=?head;
while?(current_node?!=?NULL)?{
cout??current_node-data??"?";
current_node?=?current_node-next;
}
cout??endl;
}
void?delete_node(int?index)?{
if?(head?==?NULL)?{
return;
}
Node?*current_node?=?head;
int?count?=?0;
if?(index?==?0)?{
head?=?head-next;
delete?current_node;
return;
}
while?(current_node-next?!=?NULL??count??index?-1)?{
current_node?=?current_node-next;
count++;
}
if?(count?==?index?-?1??current_node-next?!=?NULL)?{
Node?*delete_node?=?current_node-next;
current_node-next?=?delete_node-next;
delete?delete_node;
}
}
void?reverse(){
if(head?==?NULL){
return;
}
Node?*next_node,*current_node;
current_node?=?head-next;
head-next?=?NULL;
while(current_node?!=?NULL){
next_node?=?current_node-next;
current_node-next?=?head;
head?=?current_node;
current_node?=?next_node;
}
}
};
int?main()?{
LinkList?linklist;
for?(int?i?=?1;?i?=?10;?i++)?{
Node?*node?=?new?Node(i);
linklist.insert(node,?i?-?1);
}
linklist.output();
linklist.delete_node(3);
linklist.output();
linklist.reverse();
linklist.output();
return?0;
}
C語(yǔ)言創(chuàng)建單鏈表如下:
#include"stdio.h"
#include"stdlib.h"
#include"malloc.h"
#include "iostream.h"
typedef struct node
{
int??data;
node * next;
}node , * List;
void create(int n)
{
int c;
List s,L;
L=(List)malloc(sizeof(node));
L-next=NULL;
printf("請(qǐng)輸入第1個(gè)數(shù)據(jù):");
scanf("%d",c);
L-data=c;
for(int i=2;i=n;i++)
{
s=(List)malloc(sizeof(node));
printf("請(qǐng)輸入第%d個(gè)數(shù)據(jù):",i);
scanf("%d",c);
s-data=c;
s-next=L;
L-next =s;
}
printf("鏈表創(chuàng)建成功!");
}
void main()
{
int n;
printf("請(qǐng)你輸入鏈表的個(gè)數(shù):");
scanf("%d",n);
create(n);
}
單鏈表創(chuàng)建方法:
單鏈表的建立有頭插法、尾插法兩種方法。
1. 頭插法
單鏈表是用戶不斷申請(qǐng) 存儲(chǔ)單元和改變鏈接關(guān)系而得到的一種特殊 數(shù)據(jù)結(jié)構(gòu),將鏈表的左邊稱為鏈頭,右邊稱為鏈尾。頭插法建單鏈表是將鏈表右端看成固定的,鏈表不斷向左延伸而得到的。頭插法最先得到的是尾結(jié)點(diǎn)。
由于鏈表的長(zhǎng)度是隨機(jī)的,故用一個(gè)while循環(huán)來(lái)控制鏈表中結(jié)點(diǎn)個(gè)數(shù)。假設(shè)每個(gè)結(jié)點(diǎn)的值都大于O,則循環(huán)條件為輸入的值大于o。申請(qǐng) 存儲(chǔ)空間可使用malloc()函數(shù)實(shí)現(xiàn),需設(shè)立一申請(qǐng)單元 指針,但malloc()函數(shù)得到的指針并不是指向?結(jié)構(gòu)體的指針,需使用 強(qiáng)制類型轉(zhuǎn)換,將其轉(zhuǎn)換成結(jié)構(gòu)體型指針。剛開始時(shí),鏈表還沒(méi)建立,是一空鏈表,head 指針為NULL。
鏈表建立的過(guò)程是申請(qǐng)空間、得到數(shù)據(jù)、建立鏈接的循環(huán)處理過(guò)程。
2. 尾插法
若將鏈表的左端固定,鏈表不斷向右延伸,這種建立鏈表的方法稱為尾插法。尾插法建立鏈表時(shí),頭 指針固定不動(dòng),故必須設(shè)立一個(gè)搜索指針,向鏈表右邊延伸,則整個(gè)算法中應(yīng)設(shè)立三個(gè)鏈表指針,即頭指針head、搜索指針p2、申請(qǐng)單元指針pl。尾插法最先得到的是?頭結(jié)點(diǎn)。
名稱欄目:c語(yǔ)言創(chuàng)建單鏈表主函數(shù),c語(yǔ)言創(chuàng)建單向鏈表
文章來(lái)源:http://chinadenli.net/article22/dsgdhjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站設(shè)計(jì)、ChatGPT、微信公眾號(hào)、做網(wǎng)站、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)