c語言數據結構順序表實驗
① 數據結構實驗(c語言): 順序表實驗
//線性表函數操作
#include <stdio.h>
#include <string.h>
#define MaxSize 30
#define Error 0
#define True 1
typedef char ElemType;
typedef struct
{
ElemType elem[MaxSize];
int length;
}SqList; /*順序表類型定義*/
void InitList(SqList * &L) /*初始化順序表L*/
{
L = (SqList *)malloc(sizeof(SqList));
L -> length = 0;
}
void DestroyList( SqList *L ) /*釋放順序表L*/
{
free(L);
}
int ListEmpty( SqList *L ) /*判斷順序表L是否為空表*/
{
return( L -> length == 0);
}
int ListLength( SqList *L ) /*返回順序表L的元素個數*/
{
return( L -> length);
}
void DispList( SqList *L ) /*輸出順序表L*/
{
int i;
if( ListEmpty(L))
return;
for( i = 0; i < L -> length; i++ )
printf("%c", L -> elem[i]);
printf("\n");
}
int GetElem( SqList *L, int i, ElemType &e) /*獲取順序表中的第i個元素*/
{
if( i < 1 || i > L -> elem[i])
return Error;
e = L -> elem[i - 1];
return True;
}
int LocateElem( SqList *L, ElemType e) /*在順序表中查找元素e*/
{
int i = 0;
while( i < L -> length && L -> elem[i] != e)
i++;
if(i >= L -> length)
return Error;
else
return i+1;
}
int ListInsert( SqList * &L, int i, ElemType e) /*在順序表L中第i個位置插入元素e*/
{
int j;
if( i < 1 || i > L -> length + 1)
return 0;
i--; /*將順序表位序轉化為elem下標*/
for( j = L -> length; j > i; j--) /*將elem[i]及後面元素後移一個位置*/
L -> elem[j] = L -> elem[j - 1];
L -> elem[i] = e;
L -> length++; /*順序表長度增1*/
return True;
}
int ListDelete( SqList * &L, int i, ElemType &e) /*順序表L中刪除第i個元素*/
{
int j;
if( i < 1 || i > L -> length)
return Error;
i--; /*將順序表位序轉化為elem下標*/
e = L -> elem[i];
for(j = i; j < L -> length - i; j++)
L -> elem[j] = L -> elem[j + 1];
L -> length--; /*順序表長度減1*/
return True;
}
void main()
{
SqList *L;
ElemType e;
printf("(1)初始化順序表L\n");
InitList(L);
printf("(2)依次採用尾插法插入a,b,c,d,e元素\n");
ListInsert(L, 1, 'a');
ListInsert(L, 2, 'b');
ListInsert(L, 3, 'c');
ListInsert(L, 4, 'd');
ListInsert(L, 5, 'e');
printf("(3)輸出順序表L:");
DispList(L);
printf("(4)順序表L長度 = %d\n", ListLength(L));
printf("(5)順序表L為%s\n", (ListEmpty(L) ?"空" :"非空"));
GetElem(L, 3, e);
printf("(6)順序表L的第3個元素 = %c\n", e);
printf("(7)元素a的位置 = %d\n", LocateElem(L,'a'));
printf("(8)在第4個元素位置上插入f元素\n");
ListInsert(L, 4, 'f');
printf("(9)輸出新的順序表L:");
DispList(L);
printf("(10)刪除L的第3個元素\n");
ListDelete(L, 3, e);
printf("(11)輸出新的順序表L:");
DispList(L);
printf("(12)釋放順序表L\n");
DestroyList(L);
}
② 關於《數據結構C語言版》的順序表的演算法實現的實驗代碼請教高手!!
sjshkjhkc45154916
③ 求數據結構順序表c語言實現.....
無函數版本,只需你寫演算法就OK,算是比較基礎的··*順序表的基本操作*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 3
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct {
int *elem;
int length;
int listsize;
}SqList;Status Initlist_Sq(SqList &L) /*初始化順序表*/
{
}int Destroylist(SqList &L) /*銷毀順序表*/
{
}int Clearlist_Sq(SqList &L) /*清空順序表*/
{
}
Status Listempty_Sq(SqList L) /*測試順序表是否為空*/
{
}Status ListInsert_Sq(SqList &L, int i,ElemType e) /*在第i個位置上插入一個元素*/
{ }int LocateElem_Sq(SqList L,ElemType e) /*返回元素e在順序表中的位置*/
{
}Status ListDelete_Sq(SqList &L, int i, int &e) /*刪除第i個位置上的元素*/
{ }void Print_Sq(SqList L) /*輸出順序表*/
{ int i;
if (Listempty_Sq(L))
printf("\nSequential List's length is %d. It's empty!",L.length);
else
printf("\nSequential List's length is %d. These element are : ",L.length);
for(i=0;i<L.length;i++)
printf(" %d",L.elem[i]);
}
void menu()
{ printf("\n");
printf("\n* * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" 1 ------- Print the Sequential List(輸出順序表).\n");
printf(" 2 ------- Insert a data in the Sequential List(在第i個位置上插入一個元素).\n");
printf(" 3 ------- Delete a data in the Sequential List(刪除第i個位置上的元素).\n");
printf(" 4 ------- Get a element's locationt in the SqList(返回元素e在順序表中的位置).\n");
printf(" 5 ------- Clear the Sequential List(清空順序表).\n");
printf(" 6 ------- Exit.\n");
printf("* * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\n");
}void menuselect(SqList L)
{ int k,i,done=1;
ElemType e;
while (done)
{ menu();
printf("Please choose: ");
scanf("%d",&k);
getchar();
switch(k)
{ case 1: Print_Sq(L); break;
case 2:{
printf("\nInput the location and data you want to Insert: ");
scanf("%d,%d",&i,&e);
if (ListInsert_Sq(L,i,e)==ERROR) printf("Insert location is not correct!\n");
break;
} case 3:{ printf("\nInput the location you want to delete data: ");
scanf("%d",&i);
if (ListDelete_Sq(L,i,e)==ERROR)
printf("Delete location is not exit!\n");
else
printf("\nDelete data is %d.",e);
break; }
case 4:{ printf("\nInput the data you want to find: ");
scanf("%d",&e);
if (LocateElem_Sq(L,e)!=FALSE)
printf("\nData %d location in the Sequential List is %d.", e,LocateElem_Sq(L,e));
else printf("\nData %d is not in the Sequential List.\n", e);
break; }
case 5: Clearlist_Sq(L);; break;
case 6: done=0;
}
}
}
void main()
{ ElemType e;
SqList La;
int n,i;
Initlist_Sq(La);
printf("Input a number of the element in the Sequential List (n<=%d):",LIST_INIT_SIZE);
scanf("%d",&n);
printf("Enter these elements:");
for(i=1;i<=n;i++)
{scanf("%d",&e);<br> ListInsert_Sq(La,i,e);}
menuselect(La);
getch();
}
④ 數據結構 用C語言實現順序表的建立及遍歷
#include<stdio.h>
#include<malloc.h>
typedefstructnlist
{
int*np;
intlen;//已使用地址個數
intmaxlen;//最大地址個數
}NLT;
NLT*createlist();//創建順序表
intaddtolist(NLT*nlist);//向順序表插入元素
voidpList(NLT*nlist);//遍歷順序表
intmain()
{
inti;
NLT*nlist=createlist();
if(nlist)
{
for(i=0;i<nlist->maxlen;i++)
addtolist(nlist);
pList(nlist);
}
return0;
}
voidpList(NLT*nlist)//遍歷列印,空格分割,最後一個數後面沒有空格
{
inti;
for(i=0;i<nlist->len-1;i++)
printf("%d",nlist->np[i]);
printf("%d",nlist->np[nlist->len-1]);
}
NLT*createlist()
{
NLT*nlist=NULL;
nlist=(NLT*)malloc(sizeof(NLT));
scanf("%d",&nlist->maxlen);
nlist->np=(int*)malloc(sizeof(int)*nlist->maxlen);
if(!nlist||!nlist->np)
{
printf("內存申請失敗!
");
returnNULL;
}
nlist->len=0;
returnnlist;
}
intaddtolist(NLT*nlist)
{
if(nlist->len<nlist->maxlen)//如果存儲空間未滿,保存元素,保存成功返回1失敗返回0
{
scanf("%d",&nlist->np[nlist->len]);
nlist->len++;
return1;
}
else//這里可以寫當存儲滿的之後,空間擴容,本題用不到所以我不寫了
return0;
}
⑤ C語言數據結構實驗
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int arr[100];
int last;
}SeqList;
void InitList(SeqList *L);
void IsEmpty(SeqList L);
int GetLength(SeqList L);
void DeletNum(SeqList * L,int num);
void GetEmpty(SeqList * L);
void PaiXu(SeqList * L);
int main()
{
int length,addr,num;
SeqList L,*p;
p=&L;
printf("創建表\n");
InitList(&L);//初始化
IsEmpty(L);//判斷是否為空
printf("input the length\n");
scanf("%d",&length);
L.last=length-1;//數組最後下個數的下標
printf("輸入表中的值\n");//輸入表中的值
for(int i=0;i<=L.last;i++)
scanf("%d",&L.arr[i]);
length=GetLength(L);
printf("輸入想輸出的數在表中的位置(從1開始數)\n");//輸出某個位序上的數據元素
scanf("%d",&addr);
if(addr>length)
printf("該位置不存在,超過了范圍\n");
else
printf("第%d數為%d\n",addr,L.arr[addr-1]);
printf("輸入想得到前驅後繼的結點的值\n");//輸出某元素的前驅後繼
scanf("%d",&num);
for(i=0;i<=L.last;i++)
{
if(L.arr[i]==num)
{
printf("找到該結點,結點的位置為第%d數\n",i+1);
if((i+1)==length)
printf("該結點無後繼\n");
else
printf("結點後繼為%d\n",L.arr[i+1]);
if((i-1)<0)
printf("該結點無前驅\n");
else
printf("結點前驅為%d\n",L.arr[i-1]);
break;
}
}
if(i==length)
printf("表中無此數\n");
//將奇偶排序
PaiXu(&L);
printf("輸入想要刪除的數\n");
scanf("%d",&num);
DeletNum(p,num);//刪除該數
GetLength(L);//刪除後的表長
GetEmpty(&L);//置空
IsEmpty(L);//判斷是否為空
return 0;
}
void InitList(SeqList * L)
{
L->last=-1;
}
void IsEmpty(SeqList L)
{
if(L.last>=0)
printf("該表不為空\n");
else
printf("該表為空\n");
}
int GetLength(SeqList L)
{
printf("該表的長度為%d\n",L.last+1);
return L.last+1;
}
void DeletNum(SeqList * L,int num)
{
int i,k;
for(i=0;i<=L->last;i++)
{
if(L->arr[i]==num)
{
k=i;
break;
}
}
if(i==L->last+1)
printf("表中無此數\n");
for(i=k;i<L->last;i++)//刪除該數後,後面的數向前移
L->arr[i]=L->arr[i+1];
L->last--;//表長減一
for(i=0;i<=L->last;i++)
printf("%d ",L->arr[i]);
}
void GetEmpty(SeqList * L)
{
L->last=-1;
}
void PaiXu(SeqList * L)
{
int i,j,t;
i=0;
j=L->last;
while(i<j)
{
while(L->arr[i]%2!=0)
i++;
while(L->arr[j]%2==0)
j--;
if(i<j)
{
t=L->arr[i];
L->arr[i]=L->arr[j];
L->arr[j]=t;
}
}
printf("奇偶排序後\n");
for(i=0;i<=L->last;i++)
printf("%d ",L->arr[i]);
}
⑥ 數據結構 c語言版 ——順序表的查找、插入與刪除
#include<stdio.h>
#include<stdlib.h>
#define N 10 //順序表的最大容量
int length=0; //順序表的當前元素個數
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100//線性表存儲的空間初始化分配量
#define LISTINCREAMENT 10 //線性表存儲空間的分配增量
typedef struct LNode//線性單鏈表存儲結構
{
int data;
struct LNode *next;
}LNode,*LinkList;
int CreatList_L(LinkList&L)//創建一個線性鏈表
{
L=(LinkList)malloc(sizeof(LNode));//分配一個空間給鏈表,作為頭結點
if(!L) exit(OVERFLOW);
L->next=NULL;
return OK;
}
int DestroyList_L(LinkList &L)//銷毀鏈表
{
if(L) free(L);
return OK;
}
int ListInsert_L(LinkList&L,int i,int e)//再練表的第i個元素前插入一個元素e
{
LinkList p=L;//p指針定位於i-1
LNode *s;
int j=0;
while(p&&j<i-1) {p=p->next;j++;}//定位
if(!p||j>i-1) return ERROR;//如果i<1或大於鏈表元素個數+1
s=(LNode*)malloc(sizeof(LNode));
if(!s) exit(OVERFLOW);
s->data=e; //完成插入操作
s->next=p->next;
p->next=s;
return OK;
}
int ListDelet_L(LinkList&L,int i,int&e)//刪除鏈表L中的第i個元素,並返回給e;
{
LinkList p=L;
LNode* q;
int j=0;
while(!p&&j<i-1) {p=p->next;j++;}//p指針定位於i-1;
if(!p->next||j>i-1) return ERROR;
e=p->next->data; //完成刪除操作
q=p->next;
p->next=p->next->next;
free(q);
return OK;
}
int ListTraverse_L(LinkList L,int n)//鏈表的遍歷
{
int i=0;
if(!L)return ERROR;
L=L->next;
while(L)
{
if(L->data==n)return i;
L=L->next;
i++;
}
return FALSE;
}
int InverseSingleList_L(LinkList &L)
{
if(!L->next||!L->next->next)//如果鏈表少於2個Node那麼鏈表不需要改變順序
return OK;
LNode *p,*q;
p=L->next; //第一次因為p是最後一個連接所以把p->next設為空
q=p->next;
p->next=NULL;
p=q;
while(p)
{
q=p->next; //用q去保留p後面一個Node;
p->next=L->next;
L->next=p;
p=q;
}
return OK;
}
int main()
{
int List[N];
LinkList L;
int ch,exit='N';
do
{
system("CLS");
printf("\t\t********************************************\n");
printf("\t\t* 1.創建一個順序表 .........(1) *\n");
printf("\t\t* 2.在順序表中查找元表.........(2) *\n");
printf("\t\t* 3.在順序表中插入元表.........(3) *\n");
printf("\t\t* 4.在順序表中刪除元表.........(4) *\n");
printf("\t\t* 5.退出 .........(5) *\n");
printf("\t\t********************************************\n");
printf("\n請選擇操作代碼:");
ch=getchar();
switch(ch)
{
case '1':
printf("\n請輸入十個元素");
CreatList_L(L);
for(length=0;length<N;length++)
{
scanf("%d",&List[length]);
getchar();
ListInsert_L(L,length+1,List[length]);
}
printf("\n創建成功!");
getchar();
break;
case '2':
scanf("%d",&List[0]);
if(ListTraverse_L(L,List[0]))printf("該元素存在該年表的第%d個位置",ListTraverse_L(L,List[0]));
else printf("不存在該元素");
getchar();
break;
case '3':
scanf("%d%d",&length,&List[0]);
ListInsert_L(L,length,List[0]);
system("pause");
break;
case '4':
scanf("%d",&length);
ListDelet_L(L,length,List[0]);
system("pause");
break;
case '5':
printf("\n您是否真的要退出程序(Y/N):");
getchar();
exit=getchar();
break;
default:
getchar();
printf("\n無效輸入,請重新選擇...:");
getchar();
break;
}
}while(exit!='y'&&exit!='Y');
}
⑦ 基於C語言的數據結構,怎樣做順序表插入
1、順序表的插入,常用方法就是從插入點後平移數據。
2、例如:
void InsertSeqList(SeqList L, DataType x, int i)
{ //將元素x插入到順序表L的第i個數據元素之前
if(L.length==Maxsize) exit("表已滿");
if(i<1||i>L.length+1) exit("位置錯");
for (j=L.lenght; j>=i;j--)
L.data[j]=L.data[j-1]; //平移插入點之後的數據
L.data[i-1]=x; //在插入點插入數據
L.length++;
}
L.data[j]=L.data[j-1];的意思是把要插入的位置後的數據都依次往後面移動一位,比如要插入在第6個位置上,共8個數據的鏈表裡,先把第8個數據復制到第9個位置上,在把第7個數據復制到第8個位置上,在把第6個數據復制到第7個位置上。這樣第6個位置後就可以寫入,覆蓋掉以前的值就好了。這樣做的意思是騰出可以插入的地方而不破壞數據的順序排放。
⑧ 數據結構(C語言描述) 線性表實驗
#include<stdio.h>
#include<malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
int * elem;
int length;
int listsize;
}SqList;
//SqList sq;
void InitList_Sq(SqList *sq) //初始化列表
{
sq->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
sq->length=0;
sq->listsize=LIST_INIT_SIZE;
printf("---申請空間成功---!\n");
}
void GetElem(SqList *sq,int i)//獲取第i位置元素的值
{
int *p;
p=&(sq->elem[i-1]);
printf("%d",*p);
printf("\n");
}
int ListInsert_Sq(SqList *sq,int i,int a)//在i位置之前插入a
{
int *p,*q;
if(i<=0||i>sq->length+1)
{
printf("---位置不合法---!\n");
return 0;
}
if(sq->length>=sq->listsize)
{
int* newbase=(int *)realloc(sq->elem,(sq->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase)
{
printf("申請空間溢出\n");
return 0;
}
sq->elem=newbase;
sq->listsize+=LISTINCREMENT;
}
p=&(sq->elem[i-1]);//p指向第i位置的元素
q=&(sq->elem[sq->length-1]);//q指向最後一個元素
for(;q>=p;--q) *(q+1)=*q;
*p=a;
++sq->length;
return 1;
}
int ListDelete_Sq(SqList *sq,int i) //刪除i位置上的值
{
int *p,*q;
if(i<1||i>sq->length) return 0;
p=&(sq->elem[i-1]);//p指向第i位置的元素
q=sq->elem+sq->length-1;//q指向最後一個元素
for(++p;p<=q;++p)
{
*(p-1)=*p;
}
--sq->length;
return 1;
}
void visit(SqList *sq)//輸出數據
{
int i=1;
for(;i<=sq->length;i++)
{
int *p;
p=&sq->elem[i-1];
printf("%d",*p);
printf(" ");
}
}
void main()
{
int i=1,a=0,boo=1,number=0;
SqList s,*sq;
sq=&s;
InitList_Sq(sq);
printf("初始化空表\n");
printf("輸入數據個數:\n");
scanf("%d",&number);
printf("輸入%d個數據:",number);
printf("\n");
for(;i<=number;i++)
{
scanf("%d",&a);
if(boo=ListInsert_Sq(sq,i,a))
{
printf("---插入成功!---\n");
}
else
{
printf("---插入不成功,重新插入---!\n");
i=i-1;
}
}
printf("輸出所有元素\n");
visit(sq);
printf("\n");
printf("輸出刪除的位置:");
scanf("%d",&a);
if(boo=ListDelete_Sq(sq,a))
{
printf("---數據刪除成功!---\n");
}else
{
printf("---沒有刪除成功---\n");
}
printf("輸出所有元素:\n");
visit(sq);
printf("\n");
printf("輸出要顯示數據的位置:");
scanf("%d",&a);
printf("輸出%d位置數值\n",a);
if(a<0||a>sq->length)
{
printf("---輸出位置的數據不存在---\n");
}
else
{
GetElem(sq,a);
}
}
以上是可直接運行的源程序
運行結果:
---申請空間成功---!
初始化空表
輸入數據個數:
3
輸入1個數據:3
---插入成功!---
輸入2個數據;8
---插入成功!---
輸入3個數據:5
---插入成功!---
輸出所有元素:3 5 8
輸出刪除的位置:2
---數據刪除成功!---
輸出所有元素;3 8
輸出要顯示數據的位置:2
"輸出2位置數值:8
⑨ 數據結構c語言版 創建一個順序表
http://blog.csdn.net/xuhang0910/article/details/48488881
線性表順序存儲基礎
⑩ 數據結構C語言——順序表的應用實例
第一個程序有兩個錯誤:
錯誤一:
SeqList *L;
init_SeqList(L);
應改成:
SeqList s;
SeqList *L = &s;
init_SeqList(L);
錯誤原因:指針只有在初始化(即只有在指向具體對象)之後才可以參與運算,你只定義了一個指針,並未將指針指向具體的對象,當執行到init_SeqList(L); 這句時,會產生越界報錯。
錯誤二:
printf("%d\t%s\n",L->elem[1].data,L->elem[1].n);
這個語句列印出來的永遠是第一個元素,而不是刪除的元素,應改成:
printf("%d\t%s\n",L->elem[i].data,L->elem[i].n); //其中i為被刪除元素的下標
提示:
給數組賦值時,循環最好從i=0開始,for(i=1;i<=2;i++)你從i=1開始,實際上是將值賦給了數組的第二個元素。