當前位置:首頁 » 服務存儲 » 線性表的鏈式存儲代碼菜單
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

線性表的鏈式存儲代碼菜單

發布時間: 2023-06-27 19:34:52

Ⅰ 數據結構c語言單鏈表的創建,插入刪除和合並程序代碼

你看這個應該滿足要求吧。我把三種循環方式都用上了:
#include<stdio.h>
#include<math.h>

int isprime(int n)
{
int i,t;
if(n==2)
return 1;
if(n%2==0 || n<2)
return 0;
for(i=3,t=(int)sqrt(n);i<=t;i+=2)
{
if(n%i==0)
return 0;
}
return 1;
}

void main()
{
int i,a,n;

i=0;
do
{
printf("Input an integer (>=1):");
scanf("%d",&a);
if(a>=1)
break;
}while(++i<3);

if(i==3) exit(0);

printf("prime submultiples:\n");

i=1;
n=0;
while(i<=a)
{
if(a%i==0)
if(isprime(i))
{
printf("%d ",i);
n++;
if(n%10==0)
printf("\n");
}
i++;
}

Ⅱ 線性表的鏈式存儲結構,求大神指導代碼!!

假設是單鏈表存貯,從頭遍歷到尾,遍歷每個元素是將指針反轉,只需要一個額外空間。

演算法描述:
header : 指向鏈表頭

p=header;
pre=NULL;
next=NULL;
while(p!=NULL)
{
next=p->next;
p->next=pre;
pre=p;
p=next;
}
head=p;

這樣就反轉了。用了兩個額外空間,時間復雜度O(n).

Ⅲ 1、線性表順序存儲方式操作2、線性表鏈式存儲方法操作:。兩個都用c語言

下面是從我的博客裡面給你找的,你參考一下。更多的數據結構的內容,也可以去看我的博客。

/************************************************************
說明:
1、主函數內的代碼是為了測試方便,可以自行修改。
2、宏定義NEWS是人機交互信息提示,若不需要,可修改為0。
3、若是windows系統,請將258行中的clear修改為cls。
4、在輸入數據後,請多按一下回車,實現清屏。
環境:ubuntu12.04LTS、codeblocks10.05、2014-04-02
************************************************************/
#include<iostream>
#include<stdlib.h>
#include<malloc.h>
#include<cstring>
#defineNEWS1
#defineLIST_INIT_SIZE100
#defineLIST_ADD_SIZE10
#defineNEW_SIZE(L->list_size+LIST_ADD_SIZE)
usingnamespacestd;
typedefintElem_Type;
typedefstruct
{
Elem_Type*data;//元素
intlen;//長度
intlist_size;//空間
}Sq_List;
typedefenum
{
OK=0,//正常
ERROR=-1,//邏輯異常
OVER=-2//內存異常
}Status;
/******************************
函數名:Init_List
功能:構造、初始化線性表
******************************/
Sq_List*Init_List(void)
{
Sq_List*L=(Sq_List*)malloc(sizeof(Sq_List));
if(!L)
exit(OVER);
L->data=(Elem_Type*)malloc(LIST_INIT_SIZE*sizeof(Elem_Type));
if(!L->data)
exit(OVER);
L->len=0;
L->list_size=LIST_INIT_SIZE;
#if(NEWS)
cout<<"構造成功,已初始化"<<endl;
#endif
returnL;
}
/******************************
函數名:Destroy_List
功能:銷毀線性表
******************************/
StatusDestroy_List(Sq_List*L)
{
free(L);
#if(NEWS)
cout<<"銷毀成功,請不要再使用"<<endl;
#endif
returnOK;
}
/******************************
函數名:Clear_List
功能:清空線性表
******************************/
StatusClear_List(Sq_List*L)
{
memset(L->data,-1,sizeof(L->data));
L->len=0;
#if(NEWS)
cout<<"已全部清空"<<endl;
#endif
returnOK;
}
/******************************
函數名:Empty_List
功能:判斷線性表是否為空
******************************/
boolEmpty_List(Sq_List*L)
{
returnL->len==0;
}
/******************************
函數名:Length_List
功能:獲取線性表長度
******************************/
intLength_List(Sq_List*L)
{
returnL->len;
}
/******************************
函數名:Get_Elem_List
功能:指定位置獲取元素
******************************/
StatusGet_Elem_List(Sq_List*L,intindex,Elem_Type*e)
{
if(!(1<=index&&index<=Length_List(L)))
#if(NEWS)
{
cout<<"獲取位置不合法"<<endl
<<"下面顯示的數據是上次輸入的num的值,請注意!!!"<<endl;
returnERROR;
}
#else
returnERROR;
#endif
*e=L->data[index-1];
returnOK;
}
/******************************
函數名:Insert_List
功能:指定位置插入元素
******************************/
StatusInsert_List(Sq_List*L,intindex,Elem_Typee)
{
if(!(1<=index&&index<=Length_List(L)+1))
#if(NEWS)
{
cout<<"插入位置不合法"<<endl;
returnERROR;
}
#else
returnERROR;
#endif
if(Length_List(L)>=L->list_size)
#if(NEWS)
cout<<"剛才增加了存儲空間"<<endl;
#endif
L->data=(Elem_Type*)realloc(L->data,NEW_SIZE*sizeof(Elem_Type));
if(!L->data)
exit(OVER);

L->list_size+=LIST_ADD_SIZE;

for(inti=Length_List(L);i>=index-1;i--)
L->data[i+1]=L->data[i];

L->data[index-1]=e;
L->len++;
#if(NEWS)
cout<<"插入成功"<<endl;
#endif
returnOK;
}
/******************************
函數名:Delete_List
功能:指定位置刪除元素
******************************/
StatusDelete_List(Sq_List*L,intindex,Elem_Type*e)
{
if(Empty_List(L)||!(1<=index&&index<=Length_List(L)))
#if(NEWS)
{
cout<<"刪除位置不合法or目前是空表"<<endl;
returnERROR;
}
#else
returnERROR;
#endif
*e=L->data[index-1];
for(inti=index;i<Length_List(L);i++)
L->data[i-1]=L->data[i];
#if(NEWS)
cout<<"刪除成功"<<endl;
#endif
L->len--;
returnOK;
}
/******************************
函數名:Print_List
功能:輸出所有元素
******************************/
StatusPrint_List(Sq_List*L)
{
if(Empty_List(L))
returnERROR;
inttemp;
for(inti=1;i<=Length_List(L);i++)
{
Get_Elem_List(L,i,&temp);
cout<<temp<<"";
}
cout<<endl;
returnOK;
}
/******************************
函數名:print_news
功能:方便用戶選擇
******************************/
voidprint_news(void)
{
cout<<" ********************"
<<"*****************************"<<endl
<<" * 0建立、初始化 *"<<endl
<<" * *"<<endl
<<" * 1插入元素 *"<<endl
<<" * *"<<endl
<<" * 2刪除元素 *"<<endl
<<" * *"<<endl
<<" * 3銷毀 *"<<endl
<<" * *"<<endl
<<" * 4獲取表長 *"<<endl
<<" * *"<<endl
<<" * 5清空 *"<<endl
<<" * *"<<endl
<<" * 6獲取元素 *"<<endl
<<" * *"<<endl
<<" * 7列印 *"<<endl
<<" * *"<<endl
<<" * 8退出程序 *"<<endl
<<" ********************"
<<"*****************************"<<endl;
}
intmain(void)
{
Sq_List*test=NULL;
while(true)
{
print_news();
intchoose,index,num;
cout<<"要進行什麼操作?"<<endl;
cin>>choose;
switch(choose)
{
case0:
test=Init_List();break;
case1:
cout<<"插入位置"<<endl;
cin>>index;
cout<<"插入數據"<<endl;
cin>>num;
Insert_List(test,index,num);break;
case2:
cout<<"刪除的位置"<<endl;
cin>>index;
Delete_List(test,index,&num);
cout<<"被刪除的元素是:"<<num<<endl;break;
case3:
Destroy_List(test);break;
case4:
cout<<Length_List(test)<<endl;break;
case5:
Clear_List(test);break;
case6:
cout<<"獲取哪個位置的元素"<<endl;
cin>>index;
Get_Elem_List(test,index,&num);
cout<<num<<endl;break;
case7:
Print_List(test);break;
case8:
return0;
default:
break;
}
getchar();
getchar();
system("clear");
}
return0;
}

Ⅳ 數據結構:線性表的鏈式存儲(要求如下)跪求指教

這樣的態度....悲哀

Ⅳ 分別寫出線性表的鏈式存儲結構、二叉樹的二叉鏈表存儲機構的類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語言編寫鏈式存儲結構下實現線性表的創建,插入,刪除,按值查找

#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

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

Ⅶ 編程實現線性表的鏈式存儲結構,即鏈表,實現鏈表的建立和輸出

程序代碼:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
struct node
{
int num;
char name[10],Class[15];
struct node *next;
}*head,*p,*q;
int main()
{
int i,num;
char name[10],Class[15];
head=(struct node*)malloc(sizeof(struct node));
memset(name,'\0',sizeof(name));
memset(Class,'\0',sizeof(Class));
printf("信息輸入:\n");
scanf("%d%s%s",&num,name,Class);
head->num=num;
strcpy(head->name,name);
strcpy(head->Class,Class);
head->next=NULL;
for(i=0;i<5;i++)
{
memset(name,'\0',sizeof(name));
memset(Class,'\0',sizeof(Class));
scanf("%d%s%s",&num,name,Class);
p=(struct node*)malloc(sizeof(struct node));
p->num=num;
strcpy(p->name,name);
strcpy(p->Class,Class);
p->next=head;
head=p; //不帶頭結點的頭插法
}
printf("信息輸出:\n");
p=head;
while(p)
{
if(p->num<10) printf("0");
printf("%d %s %s\n",p->num,p->name,p->Class);
p=p->next;
}

p=head;
while(p) //釋放空間
{
q=p;
p=p->next;
free(q);
}
return 0;
}
輸入:
01 張三 初二(1)班
02 李四 初二(1)班
03 王五 初二(1)班
04 錢六 初二(1)班
05 孫七 初二(1)班
06 趙八 初二(1)班
輸出:
06 趙八 初二(1)班
05 孫七 初二(1)班
04 錢六 初二(1)班
03 王五 初二(1)班
02 李四 初二(1)班
01 張三 初二(1)班

Ⅷ 線性表的鏈式存儲結構定義及基本操作

是這個效果嗎

Ⅸ 數據結構(C語言版) 線性表的鏈式存儲

1、假設單鏈表為帶頭結點的單鏈表
int ListDelete(LinkList *L,int i)
{
LinkList *p; int j=0;
p=L;
while(p->next!=NULL && j<i-1)
{p=p->next; j++;
}
if (p->next==NULL || j>i-1)
{printf("不存在第i個結點\n");return 0;}
q=p->next;p->next; p->next=q->next;
free(q); return 1;
}
2、位置i和結點s的data成員在鍵盤輸入,是要求寫在函數中嗎?一般應該是通過參數傳遞的才對啊,確認後再給你程序吧